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
相关产品推荐
相关产品推荐

