Python猜词游戏重启后生命值不重置、答对判定异常问题求助
问题根因
你的代码核心问题出在递归调用的逻辑设计上:
- 当玩家耗尽机会选择重启时,你直接递归调用
question1(),新启动的游戏流程结束后,会回到上一层旧的函数执行上下文,旧上下文里out_of_guesses仍为True,会直接结束整个程序,所以才会出现答对题也提示游戏结束的情况。 - 另外当前代码答对题目后仅打印提示,没有处理下一题的跳转逻辑,while循环会直接终止,函数返回后也会回到上一层递归的结束逻辑,和上面的问题叠加就出现了你说的异常。
优化修复方案
建议把游戏的全局控制逻辑从递归改成循环,避免递归带来的上下文残留问题,同时把题目逻辑抽成通用配置,方便后续新增题目不需要改核心逻辑。
修改后的可运行代码如下:
# 题目配置,后续新增题目直接在列表里加字典即可 QUESTIONS = [ { "prompt": "Are you idiot?: ", "answer": "yes" }, # 这里可以加第二题、第三题,示例: # { # "prompt": "2+2等于几?: ", # "answer": "4" # } ] GUESS_LIMIT = 3 def run_game(): while True: # 每轮游戏从头开始,所有状态重置 current_question_idx = 0 total_questions = len(QUESTIONS) while current_question_idx < total_questions: current_q = QUESTIONS[current_question_idx] guess_count = 0 out_of_guesses = False guess = "" while guess != current_q["answer"] and not out_of_guesses: if guess_count < GUESS_LIMIT: guess = input(current_q["prompt"]).lower() if guess == current_q["answer"]: print("correct! Next question:") current_question_idx += 1 else: guess_count += 1 if guess_count < GUESS_LIMIT: print("Try again") else: out_of_guesses = True if out_of_guesses: break # 走到这里要么是答完所有题,要么是耗尽机会 while True: restart = input("Game over, want to start over?: ").lower() if restart == "yes": break elif restart == "no": exit() else: print("Its yes or no.") if __name__ == "__main__": run_game()
改动说明
- 所有题目抽成统一的配置列表,后续新增题目只需要加配置项,不需要修改核心游戏逻辑,符合你复用代码的需求
- 用外层循环控制整轮游戏的启停,不需要递归调用,每轮游戏启动时所有状态(生命值、当前题目序号)都会重置,不会出现状态残留的问题
- 答对题目后自动索引到下一题,全部答完也会触发重启询问
内容的提问来源于stack exchange,提问作者Loss1
相关产品推荐
相关产品推荐

