You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python猜题程序如何重置3次猜测计数器?

解决猜题程序计数器不重置的问题

嘿,这个问题我太熟了!本质上是你的计数器变量没有在每道新题开始时重新初始化导致的——你现在应该是把counter当成全局变量在用,或者在所有题目外面定义了它,所以上一题用完的剩余次数会带到下一题里,自然就出现负数了。

问题根源

你在顶部定义了max_guesses = 3,但如果counter也是全局变量,或者在quiz函数外部初始化的,那每道题都会复用同一个counter的状态,上一题减到0之后,下一题继续减就变成负数了。

解决方案:让每道题拥有独立的计数器

核心思路是在每道题的处理逻辑开始时,把计数器重置为max_guesses,具体做法是把counter的初始化放到quiz函数内部,而不是全局作用域里。同时,让wrong_answer函数通过参数接收剩余次数,而不是直接操作全局变量。

修改后的代码示例:

score = 0
max_guesses = 3  # 全局保存最大猜测次数,这个没问题

def quiz(riddle):
    global score
    counter = max_guesses  # 关键!每道新题开始时,重置计数器为3
    print(f"现在开始答题:{riddle['question']}")
    
    while counter > 0:
        user_input = input("请输入你的答案:")
        if user_input.strip() == riddle["answer"]:
            print("答对啦!加1分~")
            score += 1
            break
        else:
            counter -= 1
            # 把剩余次数传给wrong_answer函数
            wrong_answer(counter, riddle["answer"])

def wrong_answer(remaining_guesses, correct_answer):
    if remaining_guesses > 0:
        print(f"答错了!你还有 {remaining_guesses} 次机会")
    else:
        print(f"用完所有机会啦!正确答案是:{correct_answer}")

# 测试用例
questions = [
    {"question": "Python中用来定义函数的关键字是?", "answer": "def"},
    {"question": "列表(list)和元组(tuple)的最大区别是?", "answer": "可变性"}
]

for q in questions:
    quiz(q)

print(f"最终得分:{score}/{len(questions)}")

关键修改点解释

  1. 计数器初始化移到quiz内部:每次调用quiz()处理新题时,都会重新创建一个counter变量并赋值为max_guesses,彻底隔离了不同题目之间的计数状态。
  2. 通过参数传递剩余次数:wrong_answer函数不再依赖全局的counter,而是接收当前题目的剩余猜测次数,避免了跨题的状态污染。
  3. 全局变量只保留不变的配置:max_guesses作为全局配置是合理的,因为它是所有题目的统一规则,不需要每次修改。

这样修改后,每道新题的猜测次数都会从3开始重新计数,再也不会出现负数提示啦!

内容的提问来源于stack exchange,提问作者mhcoder36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:21