for循环编号输入场景下答案不被接受时如何停在当前序号重复输入
问题根源
你当前代码的问题核心是使用for i in range(0,10)控制编号步进,for循环会自动迭代i的取值,无论用户输入的答案是否重复、是否正确,只要走完一次输入逻辑,i就会自动加1,自然就会跳到下一个编号,无法停在当前编号要求重输。
修复思路
抛弃for循环的自动迭代逻辑,手动控制编号变量的步进规则:只有当用户输入的答案有效(正确且未重复)时,才将编号+1;如果出现答案错误、答案重复的情况,编号保持原值,停在当前步骤要求用户重新输入。
修改后可运行代码
answer = [] lives = 3 # 可替换为你原本的生命值初始值 text = ["DARK", "其他正确答案"] # 可替换为你原本的正确答案集合 tryAgain = True while tryAgain: # 每局游戏重置状态 answer = [] lives = 3 i = 0 while lives > 0 and i < 10: current_num = i + 1 answerlst = input(f"{current_num}. ").upper() if answerlst in text: if answerlst in answer: print("You repeated your answer!") # 重复输入,i不变,停在当前编号 else: answer.append(answerlst) # 输入有效,i加1进入下一题 i += 1 else: print("Incorrect. You just lose a life") lives -= 1 if lives == 0: print("GAME OVER!!!!!\n") break # 若需要10题全答对的胜利提示可自行在此处添加 ask = input("\nWanna play again? [Y] / [N]: ").upper() tryAgain = ask == 'Y'
关键修改说明
- 移除了原本逻辑混乱的
repeat外层循环,用编号变量i的手动步进替代 - 只有正确且不重复的答案才会触发
i += 1,进入下一个编号 - 重复输入、答案错误时
i保持不变,会一直在当前编号要求用户输入,符合预期逻辑
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

