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

Python实现成绩文件平均值计算 兼容文件不存在及无有效成绩场景

需求说明
  • 编写Python函数读取指定路径下的成绩文件,计算所有有效成绩的平均值
  • 若指定路径的文件不存在,返回None
  • 若文件中不存在有效成绩,返回0.0
测试场景

测试文件内容(mygrades.txt)

CS1:5.75
#
CS 2: 5.5
Mathematik 1:5.75
@!
Econ 1: 5.5
Physics:6
Chemistry:5.75
!#
@

预期输出

5.70

原有参考代码的缺陷

你提供的参考代码存在以下问题:

  1. 硬编码了读取的文件路径,没有使用函数传入的path参数,函数无法适配不同路径的调用需求
  2. 仅通过文件大小是否为0判断是否存在有效成绩,无法处理文件不为空但全是无效符号的场景
  3. 平均值计算逻辑写在循环内部,每次新增成绩就重复计算,逻辑冗余
  4. 没有对冒号后的内容做合法性校验,若冒号后不是合法数字会直接抛出异常
修正后实现代码
import os

def get_average_grade(path):
    # 先校验文件是否存在
    if not os.path.exists(path):
        return None
    grades = []
    with open(path, "r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            # 跳过不含冒号的无效行
            if ":" not in line:
                continue
            # 仅按第一个冒号分割,避免科目名包含冒号的异常情况
            _, grade_str = line.split(":", 1)
            # 尝试转换成绩为浮点数,转换失败则视为无效成绩跳过
            try:
                grade = float(grade_str.strip())
                grades.append(grade)
            except ValueError:
                continue
    # 无有效成绩返回0.0,否则返回平均值
    return sum(grades) / len(grades) if grades else 0.0

# 测试调用
if __name__ == "__main__":
    res = get_average_grade("C:\\Users\\Documents\\mygrades.txt")
    # 按需求保留两位小数输出
    print(f"{res:.2f}")

运行上述代码即可得到预期输出5.70。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:45:03