当前位置: 首页 > article >正文

python的文件操作练习

文件操作:成绩统计
有一个文件grades.txt,文件内容是每行一个学生的成绩(格式:姓名,成绩)。要求:

读取文件内容,统计所有学生的平均成绩;
将不及格(<60分)的学生写入另一个文件failures.txt。

为了实现成绩统计和不及格学生记录,我们可以通过以下步骤进行操作:
读取 grades.txt 文件:读取文件中每一行,提取学生姓名和成绩。
统计平均成绩:计算所有学生的平均成绩。
将不及格学生写入 failures.txt:筛选出成绩低于 60 的学生,并将其姓名和成绩写入另一个文件。

代码实现:

def read_grades(file_name):
    """
    读取文件内容,返回一个包含所有学生成绩的列表,格式为 (姓名, 成绩)
    """
    students = []
    with open(file_name, 'r') as file:
        for line in file:
            # 去除每行的换行符,并分割姓名和成绩
            name, grade = line.strip().split(',')
            students.append((name, float(grade)))  # 将成绩转换为浮动类型
    return students

def calculate_average(grades):
    """
    计算平均成绩
    """
    if not grades:
        return 0
    return sum(grades) / len(grades)

def write_failures(failures, file_name):
    """
    将不及格的学生记录写入文件
    """
    with open(file_name, 'w') as file:
        for name, grade in failures:
            file.write(f"{name},{grade}\n")

def main():
    # 读取成绩数据
    students = read_grades("grades.txt")
    
    # 提取所有学生的成绩列表
    grades = [grade for name, grade in students]
    
    # 计算所有学生的平均成绩
    average_grade = calculate_average(grades)
    print(f"所有学生的平均成绩是: {average_grade:.2f}")
    
    # 筛选出不及格的学生
    failures = [(name, grade) for name, grade in students if grade < 60]
    
    # 将不及格的学生写入 failures.txt
    write_failures(failures, "failures.txt")
    
    if failures:
        print("不及格的学生已经写入 'failures.txt' 文件。")
    else:
        print("没有不及格的学生。")

if __name__ == "__main__":
    main()

功能说明:
read_grades(file_name):
读取给定文件名的内容,将每一行的学生姓名和成绩存储到一个元组 (姓名, 成绩) 中,并返回一个包含所有学生成绩的列表。
使用 strip() 方法去掉行尾的换行符,并用 split(‘,’) 方法按逗号分割每一行的数据。

calculate_average(grades):
计算学生成绩的平均值。通过 sum(grades) 计算成绩总和,并用学生人数 len(grades) 计算平均值。

write_failures(failures, file_name):
将不及格的学生记录(姓名和成绩)写入指定的文件(failures.txt)。

main():
主函数负责调用以上方法:
读取文件 grades.txt 中的成绩。
计算所有学生的平均成绩并输出。
筛选出成绩低于 60 分的学生并将其信息写入 failures.txt 文件。
如果有不及格学生,提示用户不及格的学生已写入文件。


http://www.kler.cn/a/415275.html

相关文章:

  • 软件测试丨Pytest 第三方插件与 Hook 函数
  • GaussDB高智能--智能优化器介绍
  • 探索 Vue 3.0中Treeshaking特性?
  • 机器学习-----变色龙算法(Chameleon Algorithm)
  • 华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
  • React 前端框架深度剖析
  • 基于Java Springboot社区助老志愿者服务平台
  • 如何在 GitHub 上下载并切换到仓库的历史版本
  • Java学习,反射
  • 常用指标采集 exporter
  • 前端网络安全分析
  • 知识蒸馏中有哪些经验| 目标检测 |mobile-yolov5-pruning-distillation项目中剪枝知识分析
  • 在内网工作时,如何使用 vscode remote ssh 去连接内网服务器?
  • 开源项目:纯Python构建的中后台管理系统
  • 解决 YOLOv5 加载模型时 ‘AttributeError Can‘t get attribute ‘SPPF‘‘ 错误的方法
  • 【sqlcipher】pc端sqflite使用过程中遇到的问题
  • 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。-多语言
  • 【青牛科技】电动工具电流反馈型相位控制电路D2010
  • 传输控制协议(TCP)
  • 计算机网络:IP协议详细讲解
  • Hot100 - 搜索二维矩阵II
  • Unity的GPU Instancing技术
  • 智能驾驶,车联网,传感器,车载电子集中展示|2025北京自动驾驶展
  • 欧科云链研究院:比特币还能“燃”多久?
  • 【vue-router】Vue-router如何实现路由懒加载
  • Spring Boot 3.x 多环境配置详解