Python中如何将单列表元素与两列表对比?代码输出始终为0排查
代码问题分析与修正
你的代码存在以下几个核心问题,导致输出不符合预期甚至会报错:
- 循环逻辑完全错误:你用两层嵌套循环遍历所有用户输入和正确答案,这不是「对应位置元素对比」的逻辑。比如用户输入的第一个"A"会和正确答案里的"A"、"B"、"B"逐一对比,匹配到一次就加1,这会导致重复计分,完全偏离了“每道题对应判分”的需求。
- 未定义变量报错:代码中
if p is x:里的x从未定义,实际运行时会直接抛出NameError,你说输出始终为0,可能是没实际运行到这部分逻辑或者忽略了报错。 - 错误的相等判断方式:用
is判断字符串是否相等是错误的,is用来判断两个对象是否是同一个内存对象,正确的字符串相等判断应该用==。 - 扣分逻辑混乱:就算用户输入和正确答案不匹配,你又循环遍历所有错误答案去扣分,这会导致同一道题被多次扣分,逻辑完全不合理。
修正后的代码
如果你需要的是对应位置逐一对比,答对加分、答错扣分的逻辑,代码应该改成这样:
UserInput = ["A", "B", "A"] CorrectAnswers = ["A", "B", "B"] FalseAnswers = ["B", "A", "A"] def run(): score = 0 # 按位置对应遍历三个列表的元素 for user_ans, correct_ans, false_ans in zip(UserInput, CorrectAnswers, FalseAnswers): if user_ans == correct_ans: score += 1 elif user_ans == false_ans: score -= 1 else: raise ValueError("Invalid Input") print(score) run()
这段代码用zip函数将三个列表的对应位置元素配对,逐一判断:
- 用户答案和正确答案一致时加1分
- 和对应位置错误答案一致时减1分
- 输入既不是正确也不是错误答案时抛出异常
运行后输出为1,符合预期:前两题答对(+2),第三题答错(-1),总分1。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

