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

如何在Python中实现支持多正确答案的单选问答测验功能

多答案单选问答功能修复方案

存在的问题

  • 类型不匹配:input() 函数返回值为字符串类型,原代码中存储的正确答案是整数列表,二者直接比较永远不成立,因此得分始终为0
  • 判断逻辑错误:单答案场景用相等判断即可,多答案场景需要判断用户输入是否属于正确答案集合,不能直接和列表判等
  • 语法缩进错误:原代码中__init__方法没有缩进、得分打印语句放在quiz函数外部,score是函数内局部变量,外部访问会直接触发未定义报错

修正后完整代码

class Question:
    # 修正__init__方法缩进问题
    def __init__(self, prompt, answer):
        self.prompt = prompt
        self.answer = answer

question_prompts = [
    "如果月亮是蓝色请按1,如果是白色请按2\n",
    "如果苹果是紫色请按1,如果是红色请按2\n",
    "输入1或2都对\n"
]

# 正确答案统一用字符串类型,和input返回值类型匹配,避免类型转换报错
correct_answers = [
    ["1", "2"],
    ["2"],
    ["1", "2"]
]

questions = [
    Question(question_prompts[0], correct_answers[0]),
    Question(question_prompts[1], correct_answers[1]),
    Question(question_prompts[2], correct_answers[2]),
]

def quiz(questions):
    score = 0
    for question in questions:
        user_input = input(question.prompt)
        # 多答案判断逻辑:用户输入属于正确答案列表就算对
        if user_input in question.answer:
            score += 1
    # 打印逻辑移到函数内部,循环结束后执行
    print("你最终得分是 ", score, "/", len(questions))

quiz(questions)

可选优化

如果你希望保留整数类型的正确答案,只需要把用户输入转换为整数即可,修改代码如下,注意用户输入非数字时会触发报错,适合后续加了输入校验的场景:

# 把输入行替换为这行即可
user_input = int(input(question.prompt))

内容的提问来源于stack exchange,提问作者Wood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:03