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
原有参考代码的缺陷
你提供的参考代码存在以下问题:
- 硬编码了读取的文件路径,没有使用函数传入的
path参数,函数无法适配不同路径的调用需求 - 仅通过文件大小是否为0判断是否存在有效成绩,无法处理文件不为空但全是无效符号的场景
- 平均值计算逻辑写在循环内部,每次新增成绩就重复计算,逻辑冗余
- 没有对冒号后的内容做合法性校验,若冒号后不是合法数字会直接抛出异常
修正后实现代码
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
相关产品推荐
相关产品推荐

