Python 3:如何将学生姓名与成绩写入.txt文件
解决学生成绩数据收集与文件存储问题
嘿,我来帮你搞定这个学生成绩存储的问题!先梳理下你代码里的几个关键问题,然后一步步调整,让它既能正确收集所有学生的姓名和成绩,又能把数据写入到文件里~
你的代码里的核心问题
- 循环提前终止:在第一个学生输入符合要求的成绩后,你写了
break,这会直接跳出for循环,导致只能收集到一个学生的数据,这个break必须删掉! - 数据存储不完整:你只存储了成绩,没有把学生姓名和成绩对应起来,应该用元组/字典来同时保存这两个信息。
- 文件写入逻辑为空:现在你只是创建了一个空的
Results.txt,没有把收集到的实际数据写进去。
修正后的完整代码
print("---------------------------------------------------------------") number_of_students = int(input("How many students do you want to add? ")) print("---------------------------------------------------------------") # 用来存储每个学生的(姓名,成绩)元组 student_records = [] for i in range(number_of_students): print(f'Please enter the name of student {i+1}') student_name = input().strip() # 去掉输入前后的空格 print(f'Please enter the grade of student {i+1}') while True: try: student_grade = float(input()) if 0 <= student_grade <= 100: break else: print("Error: Grade must be between 0 and 100.") print('Please enter the grade again') except ValueError: print("Error: Please enter a valid number for grade.") print('Please enter the grade again') print("---------------------------------------------------------------") # 将姓名和成绩一起存入列表 student_records.append( (student_name, student_grade) ) # 计算总分和平均分 total = sum(grade for name, grade in student_records) average = total / number_of_students print ("The Average is: ","{0:.3f}".format(average)) print("---------------------------------------------------------------") print("Goodbye!") print("---------------------------------------------------------------") # 写入数据到文件 with open('Results.txt','w', encoding='utf-8') as f: # 写入文件头部 f.write("Student Grade Results\n") f.write("---------------------------------------------------------------\n") # 写入每个学生的信息 for name, grade in student_records: f.write(f"Student Name: {name} | Grade: {grade:.1f}\n") # 写入平均分 f.write("---------------------------------------------------------------\n") f.write(f"Class Average: {average:.3f}\n")
关键改动说明
- 数据结构调整:用
student_records列表存储每个学生的(姓名,成绩)元组,确保姓名和成绩一一对应,不会丢失关联信息。 - 修复循环问题:删掉了导致循环提前终止的
break,同时把成绩验证的逻辑改成了while True循环,直到输入合法成绩为止,逻辑更清晰。 - 完善文件写入:现在会把每个学生的姓名、成绩,以及班级平均分都写入到
Results.txt里,文件内容结构清晰,可读性强。 - 增强输入鲁棒性:添加了
try-except捕获非数字的成绩输入,避免程序崩溃。
小提示
- 你可以根据需求调整文件里的格式,比如用逗号分隔数据(方便后续用Excel打开),只需要把写入行改成
f"{name},{grade:.1f}\n"即可。 - 如果需要追加数据而不是覆盖文件,可以把
open的模式从'w'改成'a'。
内容的提问来源于stack exchange,提问作者Harrison Thomas
相关产品推荐
相关产品推荐

