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

如何在Python quiz程序中实现问题与多选题正确答案的映射

问题根因

校验逻辑误用了全局正确答案列表做匹配:你在quiz循环中已经通过zip取出了当前题目对应的正确答案到变量correct_choice,但判断时写的是user_answer in correct_answer,这里的correct_answer是存储了所有题目正确答案的全局列表,只要用户输入内容是任意一道题的正确答案就会判定为正确,自然无法和当前题目做绑定。

快速修复方案

仅修改1行代码即可解决当前问题,为了提升容错性还可以加大小写和空格兼容处理:
把quiz逻辑段中的判断语句

if user_answer in correct_answer:

替换为:

# 去除用户输入前后空格,统一转大写后和当前题的正确答案比对
if user_answer.strip().upper() == correct_choice.strip().upper():
更优的映射优化方案

当前用三个独立列表存储题目、选项、答案的方式很容易出现长度不一致导致的对应关系错位,建议直接把单题所有信息封装后存在同一个列表,天然实现题目和对应答案的绑定:

  1. 替换原来的三个全局列表为单个题库列表
# 替换原question_list、option_list、correct_answer三个空列表
question_bank = []
  1. 新增题目时存储为单题字典
for x in range(b):
    question = input('Enter your question:')
    o = input('Option A:')
    p = input('Option B:')
    m = input('Option C:')
    r = input('Option D:')
    choices = 'A):{}\nB):{}\nC):{}\nD):{}'.format(o, p, m, r)
    correct = input('Put your answer here:')
    # 单题所有信息绑定存储
    question_bank.append({
        "question": question,
        "choices": choices,
        "correct": correct
    })
  1. 测验逻辑直接遍历题库,不需要zip多个列表
for single_q in question_bank:
    print(single_q["question"])
    print(single_q["choices"])
    user_answer = input('Enter your answer here:').strip().upper()
    if user_answer == single_q["correct"].strip().upper():
        print("Correct")
        score += 1
    else:
        print('False Answer')
    # 得分计算逻辑保持不变即可

额外优化提示:原代码使用递归调用main_content()实现菜单循环,长时间使用会触发Python递归栈溢出,建议把菜单逻辑包裹在while True循环中,不需要递归调用自身,选择退出时直接break跳出循环即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:51:01