Python如何逐索引对比两个列表并统计匹配元素数量
逐索引对比答案统计得分实现方案
你现有代码已经完成了输入采集,只需要在现有代码后追加对应比对逻辑即可,以下是不同实现方式,按入门友好度排序:
方法1:基础索引遍历(最贴合你当前掌握的语法)
你已经会用range()生成序列,直接通过索引取两个列表同位置元素对比即可,逻辑完全对应“第N题学生答案对比第N题标准答案”的需求:
# 接你已写好的输入采集代码后 for i in range(quest): # 取相同索引位置的两个值对比 if stud[i] == prof[i]: score += 1 # 最终score就是答对的总题数,可直接打印输出 print(f"答对总题数:{score}")
逻辑说明:range(quest)生成的i取值是从0到quest-1的整数,正好是两个列表所有元素的索引值,每次循环只对比同题目位置的答案,不会出现跨题匹配的问题。
方法2:匹配索引存储法(对应你之前的思路)
如果需要留存做对的题目索引方便后续做错题分析,可以按你之前的思路新建列表存匹配项的索引,最后取列表长度即为得分:
correct_idx = [] for i in range(quest): if stud[i] == prof[i]: correct_idx.append(i) score = len(correct_idx) # 后续如果要查错题,只要找不在correct_idx里的索引即可,不需要重复遍历
方法3:简洁配对写法(熟悉语法后可使用)
Python内置的zip()函数可以把多个列表同位置的元素打包成元组,不需要手动操作索引就能逐位配对对比,代码更简洁:
score = 0 for s_ans, p_ans in zip(stud, prof): if s_ans == p_ans: score += 1 # 还可以用生成器表达式一行完成统计 score = sum(1 for s, p in zip(stud, prof) if s == p)
实用优化提示
做选择题判分的时候,建议在输入采集阶段就对答案做标准化处理,避免用户输入时带多余空格、大小写不一致导致误判,比如修改输入append的逻辑:
for i in range(quest): ans = input() # 去掉答案前后空格、统一转成大写 stud.append(ans.strip().upper()) for i in range(quest): gab = input() prof.append(gab.strip().upper())
就算学生输入a、标准答案输入A,程序也能正确判定为答对。
内容的提问来源于stack exchange,提问作者th0bard
相关产品推荐
相关产品推荐

