You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐索引比较标准答案列表与学生答案列表?

逐索引比较学生答案与标准答案的正确实现

原代码存在的问题

  • 统计正确题数的变量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()

关键改进说明

  1. 文件管理优化:使用with语句自动处理文件关闭,避免手动关闭可能引发的资源泄漏问题。
  2. 答案列表处理简化:用列表推导式一次性完成换行符去除和空行过滤,代码更简洁高效。
  3. 正确次数累计修正:将correct_answers初始化移到循环外,确保正确次数可以正常累计。
  4. 长度兼容处理:借助itertools.zip_longest处理两个列表长度不一致的场景,避免索引越界,缺失的答案直接视为错误。
  5. 输出逻辑调整:将结果打印放在循环结束后,仅输出一次最终统计结果,符合常规需求。

内容的提问来源于stack exchange,提问作者BigSaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:56:01