Python条件判断语句逻辑异常求助:无论输入答案均判定为正确
Python Quiz 程序总是返回“正确答案”的问题修复
问题诊断
你的代码核心问题出在条件判断的逻辑写法错误。比如这一行:
if 'Christopher Columbus' or 'christopher columubus' == query:
在Python中,非空字符串会被视为布尔值True,所以'Christopher Columbus'本身就是真命题,导致整个if条件永远成立——不管用户输入的query是什么内容,都会直接进入“正确答案”的分支。同样的错误也出现在第二个问题的条件判断if "Russia" or 'russia' == query:中。
另外还要注意第一个问题里的拼写笔误:'christopher columubus'应该是'christopher columbus',这个错误会导致用户输入正确拼写时反而被判定为错误。
修复方案
我们需要修正条件判断的写法,确保是在判断query是否匹配目标答案。这里提供两种更合理的实现方式:
方式1:明确的多值匹配
直接让每个判断都指向query,避免逻辑短路:
elif "quiz" in query: executed1 = 0 executed2 = 0 executed3 = 0 executed4 = 0 executed5 = 0 correct = 0 q = 0 while q < 5: quiz = random.randint(1, 5) if quiz == 1: if executed1 == 1: pass else: print("Question) Who discovered The United States of America?") speak("Question) Who discovered The United States of America?") trivia() # 假设此函数会将用户输入更新到query变量 if query == 'Christopher Columbus' or query == 'christopher columbus': speak("Correct Answer!") correct += 1 executed1 = 1 else: print("Wrong Answer!") speak("Wrong Answer") executed1 = 1 q += 1 elif quiz == 2: if executed2 == 1: pass else: print("Question) Which nation was the first to go in space?") speak("Question) Which nation was the first to go in space?") trivia() if query == "Russia" or query == 'russia': print("Correct Answer") speak("Correct Answer!") correct += 1 executed2 = 1 else: print("Wrong Answer!") speak("Wrong Answer!") executed2 = 1 q += 1 # 其他问题的判断逻辑请按此格式修改
方式2:忽略大小写的匹配(更简洁)
将query转换为小写后,和统一小写的答案比较,这样可以覆盖所有大小写组合的输入,代码也更简洁:
elif "quiz" in query: executed1 = 0 executed2 = 0 executed3 = 0 executed4 = 0 executed5 = 0 correct = 0 q = 0 while q < 5: quiz = random.randint(1, 5) if quiz == 1: if executed1 == 1: pass else: print("Question) Who discovered The United States of America?") speak("Question) Who discovered The United States of America?") trivia() # 统一转换为小写,避免大小写干扰 if query.lower() == 'christopher columbus': speak("Correct Answer!") correct += 1 executed1 = 1 else: print("Wrong Answer!") speak("Wrong Answer") executed1 = 1 q += 1 elif quiz == 2: if executed2 == 1: pass else: print("Question) Which nation was the first to go in space?") speak("Question) Which nation was the first to go in space?") trivia() if query.lower() == "russia": print("Correct Answer") speak("Correct Answer!") correct += 1 executed2 = 1 else: print("Wrong Answer!") speak("Wrong Answer!") executed2 = 1 q += 1 # 其他问题同理修改
额外优化建议
可以把题目和答案整理成字典列表,减少重复的if-elif结构,让代码更易维护:
# 提前定义题库 quiz_questions = [ { "question": "Who discovered The United States of America?", "answer": "christopher columbus" }, { "question": "Which nation was the first to go in space?", "answer": "russia" } # 继续添加其他题目 ]
之后通过循环遍历题库来实现答题逻辑,避免大量重复代码。
内容的提问来源于stack exchange,提问作者NoName
相关产品推荐
相关产品推荐

