Python实现选择题测验时如何处理用户输入的无效非预期答案?
Python选择题测验程序修复方案
现有代码问题
- 缩进不规范:函数体内的
score初始化、for循环等代码块没有正确缩进,无法正常运行 - 小写转换无效:
user_answer.lower()仅返回转换后的新字符串,未赋值回原变量,用户输入的大写选项无法被识别 - 合法性判断逻辑错误:
user_answer == "a" or "b" or "c"的写法等效于(user_answer == "a") or True or True,永远返回真,所有输入都会被判定为合法,无法触发重输逻辑 - 原有跳转规则错误,不符合「输入合法就进入下一题」的需求
修复后完整代码
def test_run2(questions): score = 0 for question in questions: while True: user_answer = input(question.prompt).strip() user_answer = user_answer.lower() # 判断是否为合法选项 if user_answer in ("a", "b", "c"): if user_answer == question.answer: score += 1 # 输入合法无论对错都进入下一题 break # 输入不合法提示后重新提问 print("输入无效,请输入a、b、c其中一个选项") # 测验结束输出得分,可根据需求删除 print(f"测验结束,你的得分是:{score}/{len(questions)}") return score
修改说明
- 修正所有代码块缩进,符合Python语法要求
- 给小写转换操作增加赋值逻辑,确保用户输入的大小写选项都能被正常识别,额外增加
strip()处理用户误输入的首尾空格 - 把合法性判断替换为
user_answer in ("a", "b", "c"),只有输入为三个合法选项之一才会判定通过 - 调整流程逻辑:输入不合法时提示后自动重输当前问题,输入合法后不管答案对错都跳出循环进入下一题,答对自动加分
内容的提问来源于stack exchange,提问作者ZeusTheMotek
相关产品推荐
相关产品推荐

