Python中对比两个列表计算匹配率出错,预期与实际结果不符
问题排查与代码修正
错误原因
你使用了嵌套循环,这会遍历答案册和学生答案的所有元素组合,只要值相等就加分,而非仅比对对应位置的答案。比如答案册里的每个"A"都会和学生答案里的所有"A"匹配加分,最终统计的是全局值匹配次数,而非位置匹配次数,导致分数计算完全错误。
修正方案
需要同时遍历两个列表的对应位置元素,可以用zip()函数将两个列表打包成对应元素对,逐个比对:
def get_test_score(answer_sheet, student_answers): score = 0 # 同时遍历对应位置的答案对 for correct_ans, student_ans in zip(answer_sheet, student_answers): if correct_ans == student_ans: score += 1 # 计算匹配率百分比 percentage = (score / len(answer_sheet)) * 100 return percentage
验证测试用例
代入你的测试数据:
- answer_sheet:
['A', 'A', 'C', 'D', 'D', 'B', 'C', 'D'] - student_answers:
['A', 'B', 'C', 'A', 'D', 'B', 'C', 'D']
对应位置匹配的有第0、2、4、5、6、7位,共6个正确答案。计算得:(6/8)*100 = 75.0,与预期结果一致。
内容的提问来源于stack exchange,提问作者Jason Dias
相关产品推荐
相关产品推荐

