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

Python读写文件问题:读取学生数据并生成统计输出文件遇阻

解决Python读取学生分数并输出统计结果的问题

我来帮你搞定这个问题!首先咱们得先明确input.txt的格式,举个实际的例子会更清晰:

3
2
Alice 85 90
Bob 78 82
Charlie 92 88

上面的示例里,第一行是3个学生,第二行是每个学生有2门考试分数,后面每行对应一个学生的姓名和分数。接下来咱们一步步实现完整的功能:

步骤1:读取并解析输入文件

首先要打开input.txt,按行读取内容,然后解析出学生数量、分数数量,以及每个学生的信息。这里要注意处理文件读取的异常,比如文件不存在的情况。

步骤2:计算所需统计数据

  • 计算每个学生的总分和个人平均分(可选,如果你需要的话)
  • 计算班级所有分数的平均分

步骤3:将结果写入output.txt

把班级平均分、每个学生的姓名和分数(以及个人统计数据)按清晰的格式写入输出文件。

完整的Python代码

def process_scores(input_file, output_file):
    try:
        # 读取输入文件,过滤空行
        with open(input_file, 'r', encoding='utf-8') as f:
            lines = [line.strip() for line in f if line.strip()]
        
        # 解析基础信息
        student_count = int(lines[0])
        score_count_per_student = int(lines[1])
        
        # 初始化统计变量
        total_all_scores = 0
        student_data = []
        
        # 处理每个学生的成绩数据
        for line in lines[2:2+student_count]:
            parts = line.split()
            name = parts[0]
            scores = list(map(int, parts[1:1+score_count_per_student]))
            # 计算个人总分与平均分
            student_total = sum(scores)
            student_avg = student_total / score_count_per_student
            # 累加班级总分
            total_all_scores += student_total
            # 存储学生信息
            student_data.append({
                'name': name,
                'scores': scores,
                'total': student_total,
                'avg': student_avg
            })
        
        # 计算班级整体平均分
        class_avg = total_all_scores / (student_count * score_count_per_student)
        
        # 写入输出文件
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write(f"班级平均分: {class_avg:.2f}\n\n")
            f.write("学生成绩详情:\n")
            for student in student_data:
                f.write(f"姓名: {student['name']}\n")
                f.write(f"分数: {' '.join(map(str, student['scores']))}\n")
                f.write(f"个人总分: {student['total']}, 个人平均分: {student['avg']:.2f}\n\n")
        
        print("处理完成,结果已写入output.txt")
    
    except FileNotFoundError:
        print(f"错误:未找到文件 {input_file}")
    except ValueError:
        print("错误:输入文件格式不正确,请检查内容是否符合要求")
    except Exception as e:
        print(f"发生未知错误: {e}")

# 调用函数执行处理
process_scores('input.txt', 'output.txt')

代码说明

  • 使用with open()语句确保文件自动关闭,避免资源泄漏
  • 先过滤空行,避免解析时出现格式错误
  • 对分数做字符串转整数的类型转换,保证计算逻辑正常
  • 平均分保留两位小数,让输出结果更美观易读
  • 加入异常处理,捕获文件不存在、格式错误等常见问题,避免程序直接崩溃

示例output.txt内容

运行代码后,output.txt会生成如下格式的内容:

班级平均分: 85.83

学生成绩详情:
姓名: Alice
分数: 85 90
个人总分: 175, 个人平均分: 87.50

姓名: Bob
分数: 78 82
个人总分: 160, 个人平均分: 80.00

姓名: Charlie
分数: 92 88
个人总分: 180, 个人平均分: 90.00

如果你的input.txt格式和示例略有差异(比如分数用逗号分隔),只需要调整split()的参数,比如改成split(',')后再处理多余空格即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:30:34