如何逐索引比较标准答案列表与学生答案列表?
逐索引比较学生答案与标准答案的正确实现
原代码存在的问题
- 统计正确题数的变量
correct_answers在循环内部初始化,导致每次匹配正确时都会重置为0,无法累计总数。 - 结果打印语句放在循环内,每匹配一次就输出一次,不符合“统计完成后输出最终结果”的需求。
- Windows文件路径中的反斜杠未正确转义,会导致路径解析错误。
- 处理换行符的while循环写法冗余,可简化。
- 未处理学生答案列表与标准答案列表长度不一致的情况,可能引发索引越界错误。
修正后的代码
# 标准答案列表 answers = ['A','C','A','A','D','B','C','A','C','B','A','D','C','A','D','C','B','B','D','A'] def main(): # 使用原始字符串避免路径转义问题 file_path = r"C:\Users\mrsac\OneDrive\Desktop\CS 202 Files\Module 2\Module 2 Assignment Folder\studentanswers1.txt" # 用with语句自动管理文件关闭,更安全 with open(file_path, 'r') as infile: # 读取每行并去除换行符,同时过滤空行(防止文件末尾有空行) student_answers = [line.rstrip('\n') for line in infile if line.strip()] # 初始化正确题数 correct_answers = 0 # 导入zip_longest处理两个列表长度不一致的情况 from itertools import zip_longest for std_ans, stu_ans in zip_longest(answers, student_answers, fillvalue=None): # 仅当两者都存在且相等时,计数正确 if std_ans is not None and stu_ans is not None and std_ans == stu_ans: correct_answers += 1 # 输出最终统计结果 print(f'你答对了 {correct_answers} 道题。') if correct_answers >= 15: print('你通过了考试!') else: print('你未通过考试。') main()
关键改进说明
- 文件管理优化:使用
with语句自动处理文件关闭,避免手动关闭可能引发的资源泄漏问题。 - 答案列表处理简化:用列表推导式一次性完成换行符去除和空行过滤,代码更简洁高效。
- 正确次数累计修正:将
correct_answers初始化移到循环外,确保正确次数可以正常累计。 - 长度兼容处理:借助
itertools.zip_longest处理两个列表长度不一致的场景,避免索引越界,缺失的答案直接视为错误。 - 输出逻辑调整:将结果打印放在循环结束后,仅输出一次最终统计结果,符合常规需求。
内容的提问来源于stack exchange,提问作者BigSaus
相关产品推荐
相关产品推荐

