You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:25:17