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)}")
关键修改点解释
- 计数器初始化移到
quiz内部:每次调用quiz()处理新题时,都会重新创建一个counter变量并赋值为max_guesses,彻底隔离了不同题目之间的计数状态。 - 通过参数传递剩余次数:
wrong_answer函数不再依赖全局的counter,而是接收当前题目的剩余猜测次数,避免了跨题的状态污染。 - 全局变量只保留不变的配置:
max_guesses作为全局配置是合理的,因为它是所有题目的统一规则,不需要每次修改。
这样修改后,每道新题的猜测次数都会从3开始重新计数,再也不会出现负数提示啦!
内容的提问来源于stack exchange,提问作者mhcoder36
相关产品推荐
相关产品推荐

