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

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")

关键改动说明

  1. 数据结构调整:用student_records列表存储每个学生的(姓名,成绩)元组,确保姓名和成绩一一对应,不会丢失关联信息。
  2. 修复循环问题:删掉了导致循环提前终止的break,同时把成绩验证的逻辑改成了while True循环,直到输入合法成绩为止,逻辑更清晰。
  3. 完善文件写入:现在会把每个学生的姓名、成绩,以及班级平均分都写入到Results.txt里,文件内容结构清晰,可读性强。
  4. 增强输入鲁棒性:添加了try-except捕获非数字的成绩输入,避免程序崩溃。

小提示

  • 你可以根据需求调整文件里的格式,比如用逗号分隔数据(方便后续用Excel打开),只需要把写入行改成f"{name},{grade:.1f}\n"即可。
  • 如果需要追加数据而不是覆盖文件,可以把open的模式从'w'改成'a'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:01