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

Python问答游戏导入外部字典出现AttributeError报错如何解决?

问题修复方案

报错根因

你调用compare_answer函数时传入的correct参数不是预期的字符串类型:从你给出的题目字典结构可知,quiz[question]["answer"]返回的是存储多个答案选项的列表,每个列表元素是包含answer(答案内容)和correct(是否为正确答案)字段的字典,直接将列表传入函数调用字符串方法strip()自然会触发属性不存在的报错。

适配后的可运行代码

from questions import quiz

print("------ 欢迎来到Python知识问答游戏 ------")


def compare_answer(correct_options: list, user_input: str) -> bool:
    # 先标准化处理用户输入:去除前后空格、统一转小写
    processed_user = user_input.strip().lower()
    # 遍历所有答案选项,匹配任意一个标记为正确的答案即判定答对
    for option in correct_options:
        if option.get("correct", False):
            processed_correct = option["answer"].strip().lower()
            if processed_correct == processed_user:
                return True
    return False


score = 0
for question in quiz:
    print(quiz[question]['question'])
    user_answer = input("> ")
    correct_answer = quiz[question]["answer"]
    if compare_answer(correct_answer, user_answer):
        score += 1
        print(f"答对了!")
    else:
        # 提取所有正确答案拼接后展示
        right_answers = [opt["answer"] for opt in correct_answer if opt.get("correct", False)]
        print(f"答错了,正确答案是:{' 或 '.join(right_answers)}")
print(f"你总共答对了{score}题,共{len(quiz)}题!")

核心修改说明

  • 调整了compare_answer函数的入参定义,第一个参数接收答案列表,不再接收字符串
  • 新增答案遍历逻辑,支持多个正确答案的匹配判定,同时保留了原有的大小写、前后空格忽略的规则
  • 优化了答错提示的展示逻辑,不会直接输出原始的列表字典结构,只会展示所有正确答案的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:05