文件操作:成绩统计
有一个文件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 文件。
如果有不及格学生,提示用户不及格的学生已写入文件。