Python答题程序如何实现非法输入重提与循环询问重玩功能
Python答题程序修复方案
完整修改后代码
import sys class Question: def __init__(self, prompt, answer): self.prompt = prompt self.answer = answer question_prompts = [ '苹果是什么颜色?\n(a) 红/绿\n(b) 紫\n(c) 橙\n\n', '香蕉是什么颜色?\n(a) 蓝绿色\n(b) 品红色\n(c) 黄\n\n', '草莓是什么颜色?\n(a) 黄\n(b) 红\n(c) 蓝\n\n', ] questions = [ Question(question_prompts[0], 'a'), Question(question_prompts[1], 'c'), Question(question_prompts[2], 'b'), ] def run_test(questions): score = 0 # 遍历所有题目 for question in questions: # 单题输入校验循环,输入不合法就一直重输当前题 while True: answer = input(question.prompt).strip().lower() if answer not in ['a', 'b', 'c']: print('您输入的不是a、b、c选项,请重新输入') continue # 输入合法跳出当前循环 break # 判断答案是否正确 if answer == question.answer: score += 1 print(f'您的得分是 {str(score)}/{str(len(questions))}') # 主逻辑循环,实现多次重玩 while True: run_test(questions) # 重玩选择校验 while True: choice = input("是否重新游玩?请输入是或否:").strip() if choice not in ['是', '否']: print('输入无效,请输入是或否') continue break if choice == '否': sys.exit(0)
问题修复说明
问题1:非法输入重复提问修复
- 原代码的
while循环错误嵌套在题目遍历逻辑外层,会导致无限重复整套题目,且输入校验逻辑位置错误 - 将
while循环放在单道题的输入逻辑内,仅当用户输入a/b/c三个合法选项后才会进入答案判断步骤,否则始终停留在当前题目要求重输 - 同时修复了原代码答案判断逻辑缩进错误的问题,原逻辑仅会判断最后一道题的答案是否正确
问题2:持续重玩功能修复
- 原代码仅在第一次答题结束后调用一次重玩询问,无法实现多次循环重玩
- 新增外层无限循环包裹答题+重玩询问逻辑,每次答题结束后自动触发重玩询问,用户输入
是就重新启动答题流程,输入否直接退出程序 - 额外增加重玩输入校验逻辑,用户输入非是/否的内容时会要求重新输入,避免程序异常
内容的提问来源于stack exchange,提问作者abcdefg
相关产品推荐
相关产品推荐

