如何修复Python问答程序中列表与if语句的匹配错误
修复问答程序的答案匹配错误
你的10题问答程序存在答案匹配逻辑错误,导致输入正确选项时仍被判定为错误,以下是具体修复方案:
错误原因分析
- 核心逻辑错误:代码中使用
if userAnswer == answer[userAnswer]进行判断,这是用用户输入的答案作为索引去取answer列表的值,再和用户输入对比,完全颠倒了“用当前题目对应的正确答案与用户输入对比”的逻辑。 - 额外问题:滥用
global变量(无需将实例属性或局部变量声明为全局)、将result函数定义在__init__方法内、user2score未实际使用、未利用题目序号与答案列表的对应关系。
修复后的完整代码
class Quiz: def __init__(self): # 存储所有题目,键为题目序号字符串 self.questions = { '1': """ Q1. What does “www” stand for in a website browser? 1) World Wide Web 2) World Wide World 3) Web Wide World 4) Web World Wide """, # 在此补充第2-9题的内容... '10': """ Q10. Who was the president of USSR when Chernobyl Power Plant exploded? 1) Vladimir Lenin 2) Vladimir Putin 3) Mikhail Gorbachev 4) Joseph Stalin """ } # 正确答案列表:索引0占位,索引1对应第1题,索引10对应第10题 self.correct_answers = [0, 1, 2, 3, 2, 3, 1, 4, 1, 2, 3] self.user_score = 0 def show_result(self): print(f"User1, your score is: {self.user_score}") def run_quiz(self): for question_num in range(1, 11): # 获取并打印当前题目 question_key = str(question_num) print(self.questions[question_key]) # 处理用户输入,确保输入有效 while True: try: user_answer = int(input("Answer: ")) if 1 <= user_answer <= 4: break print("请输入1-4之间的有效数字!") except ValueError: print("请输入数字格式的答案!") # 对比用户答案与正确答案 if user_answer == self.correct_answers[question_num]: print("Correct!") self.user_score += 1 else: print("Incorrect!") # 展示最终得分 self.show_result() # 启动问答程序 quiz = Quiz() quiz.run_quiz()
关键修复点说明
- 重构类结构:将答题逻辑拆分到
run_quiz方法,__init__仅负责初始化数据,代码结构更清晰。 - 修正匹配逻辑:用当前题目序号(
question_num)作为索引从correct_answers列表中获取正确答案,再与用户输入对比,这才是符合需求的逻辑。 - 移除冗余全局变量:使用实例属性存储题目、答案和得分,避免不必要的全局变量污染。
- 添加输入验证:防止用户输入非数字或超出选项范围的内容,提升程序稳定性。
- 规范方法定义:将结果展示逻辑改为独立的实例方法
show_result,符合面向对象设计规范。
内容的提问来源于stack exchange,提问作者whoami
相关产品推荐
相关产品推荐

