如何修复对错题评分代码以正确显示分数?
问题分析与修复:评分计算异常问题
问题描述
评分系统设定最低分0、最高分5,但实际运行后最低分达12、最高分达13,评分逻辑为输入答案与存储答案匹配时计分。
代码核心问题
- 嵌套循环导致分数溢出:外层遍历每个问题时,内层又遍历全部答案列表
anslist,每回答一个问题就会和所有5个答案比对。比如输入"t",会匹配到anslist中所有"t"选项直接累加分数,单次正确回答可能加3分,最终分数远超上限。 - 未定义变量
count:代码中使用count +=1但未初始化count,运行会直接报错。 - 无效的输入验证逻辑:无论输入是否有效都执行
count +=1,且count无实际用途,属于冗余代码。
修复后的代码
# 题目与答案列表 questlist = ["Q1","t", "Q2", "f", "Q3", "t", "Q4","f", "Q5", "t"] # 拆分题目和对应答案 newqlist = questlist[::2] anslist = questlist[1::2] score = 0 # 同时遍历题目和其对应的正确答案 for question, correct_ans in zip(newqlist, anslist): print(question) answer = input("请输入't'代表正确,'f'代表错误:") # 验证输入有效性 if answer not in ("t", "f"): print("输入无效,不计分") continue # 仅比对当前问题的正确答案 if answer == correct_ans: score +=1 # 输出最终评分结果 percentage = (score / 5) * 100 print(f"你的得分是 {score}/5,正确率 {percentage}%。")
修复说明
- 用
zip关联题目与对应答案:确保每个问题只和自身的正确答案比对,避免重复累加分数,保证分数范围在0-5之间。 - 删除冗余的
count变量:原代码中count未定义且无实际作用,直接移除相关逻辑。 - 优化输入验证逻辑:输入无效时跳过计分,避免无效输入干扰结果。
- 采用f-string简化输出:让输出代码更简洁易读。
内容的提问来源于stack exchange,提问作者Gabriel Angelos
相关产品推荐
相关产品推荐

