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

Python成绩处理代码循环异常原因分析及优化方案

问题分析

代码核心问题

  • 行处理逻辑错误:line.strip('\n').split('\n')属于冗余操作,按行读取的line只需用strip()去除首尾空白即可,用split('\n')会把单行内容包装成单元素列表,导致后续数据处理混乱——并非循环只执行一次,而是处理后的数据格式错误让你产生了误解。
  • 字典键无序匹配:用集合{'学号','平时成绩','期末成绩'}作为字典键,集合是无序结构,zip时会随机匹配键值对,大概率出现成绩读取错误的情况。
  • 文件写入逻辑错误:每次循环用'w'模式打开score2.txt会覆盖之前的内容;且writelines无法直接写入字典,需要拼接成指定字符串格式。
  • 未完成统计需求:缺少分数段统计、总平均分计算及结果输出的逻辑。
优化后的代码
# 初始化统计变量
total_students = 0
score_ranges = {
    "90分及以上": 0,
    "80~89分": 0,
    "70~79分": 0,
    "60~69分": 0,
    "60分以下": 0
}
total_score = 0.0

# 同时读取源文件、写入目标文件
with open(r"C:\Users\GioGio\Desktop\score1.txt", 'r') as f_read, \
     open(r"score2.txt", 'w') as f_write:
    for line in f_read:
        # 去除首尾空白并按空格分割字段,跳过空行
        parts = line.strip().split()
        if not parts:
            continue
        # 解构字段到变量
        student_id, usual_score, final_score = parts
        # 计算综合成绩并取整
        usual_score = int(usual_score)
        final_score = int(final_score)
        comprehensive_score = round(0.4 * usual_score + 0.6 * final_score)
        # 写入score2.txt
        f_write.write(f"{student_id} {comprehensive_score}\n")
        # 更新统计数据
        total_students += 1
        total_score += comprehensive_score
        # 统计分数段
        if comprehensive_score >= 90:
            score_ranges["90分及以上"] += 1
        elif 80 <= comprehensive_score <= 89:
            score_ranges["80~89分"] += 1
        elif 70 <= comprehensive_score <= 79:
            score_ranges["70~79分"] += 1
        elif 60 <= comprehensive_score <= 69:
            score_ranges["60~69分"] += 1
        else:
            score_ranges["60分以下"] += 1

# 输出统计结果
print(f"班级总人数:{total_students}")
print("分数段统计:")
for range_name, count in score_ranges.items():
    print(f"- {range_name}:{count}人")
if total_students > 0:
    average_score = round(total_score / total_students, 1)
    print(f"班级总平均分:{average_score}")
else:
    print("班级无有效成绩数据")
优化说明
  • 数据读取:用strip()+split()处理每行数据,同时跳过空行避免报错,保证数据格式正确。
  • 文件操作:一次性打开源文件和目标文件,避免重复打开关闭文件,提升效率且不会覆盖已有内容。
  • 统计逻辑:处理每行数据时同步更新统计变量,最后统一计算平均分并格式化输出,完成所有需求。
  • 避免键无序问题:直接解构分割后的字段到变量,无需依赖字典,彻底避免键值匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:05:03