Python成绩册作业、书写和阅读记录以及字母成绩合计,无法得到正确的输出

2024-10-04 09:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是:创建一个Python程序,允许用户输入类名、教职员工姓名、每个学生的姓名以及每个学生获得的字母等级。该程序应统计并显示获得As、Bs、Cs、Ds和Fs的学生人数。程序应该将所有的输入和输出信息保存到一个名为类名grades.txt. 在

到目前为止我写的代码如下。我只是在学习,这是非常初级的,我道歉。下面是输出。我不知道为什么我要多出两张唱片。有人能解释一下我做错了什么吗?文件被创建,输入被写入到文件中,但是在读取过程中它会崩溃。在

def main():


    student_num = 0
    count = 0
    a_total = 0
    b_total = 0
    c_total = 0
    d_total = 0
    f_total = 0
    student_num = int(input("Enter the number of students you wish to enter 
    grades for: "))
    gradefile = open('gradebook.txt', 'w')
    for count in range(1, student_num + 1):
        class_name = input('Enter class name: ')
        faculty_name = input('Enter faculty name: ')
        student_name = input('Enter student name: ')
        letter_grade = input('Enter letter grade (A, B, C, D, or F) ')
        print()
        if letter_grade.upper() == 'A':
            a_total += 1
        elif letter_grade.upper() == 'B':
            b_total += 1
        elif letter_grade.upper() == 'C':
            c_total += 1
        elif letter_grade.upper() == 'D':
            d_total += 1
        elif letter_grade.upper() == 'F':
            f_total += 1
        else:
            print('Invalid response')
        gradefile.write(class_name + '\n')
        gradefile.write(faculty_name + '\n')
        gradefile.write(student_name + '\n')
        gradefile.write(letter_grade + '\n')

    gradefile.write(str(a_total) + '\n')
    gradefile.write(str(b_total) + '\n')
    gradefile.write(str(c_total) + '\n')
    gradefile.write(str(d_total) + '\n')
    gradefile.write(str(f_total) + '\n')
    gradefile.close()

    gradefile1 = open('gradebook.txt', 'r')

    class_name = gradefile1.readline()
    while class_name != '':
        faculty_name = gradefile1.readline()
        student_name = gradefile1.readline()
        letter_grade = gradefile1.readline()

        class_name = class_name.rstrip('\n')
        faculty_name = faculty_name.rstrip('\n')
        student_name = student_name.rstrip('\n')
        letter_grade = letter_grade.rstrip('\n')

        print('Class name: ', class_name)
        print('Faculty name: ', faculty_name)
        print('Student name: ', student_name)
        print('Letter grade: ', letter_grade.upper())
        print()
        class_name = gradefile1.readline()
    a_total = gradefile1.readline()
    b_total = gradefile1.readline()
    c_total = gradefile1.readline()
    d_total = gradefile1.readline()
    f_total = gradefile1.readline()
    a_total = a_total.rstrip('\n')
    b_total = b_total.rstrip('\n')
    c_total = c_total.rstrip('\n')
    d_total = d_total.rstrip('\n')
    f_total = f_total.rstrip('\n')
    print('Total As: ', a_total)
    print('Total Bs: ', b_total)
    print('Total Cs: ', c_total)
    print('Total Ds: ', d_total)
    print('Total Fs: ', f_total)
    gradefile1.close()
main()

用户输入:

^{pr2}$

返回输出:

Class name:  bio
Faculty name:  jones
Student name:  smith
Letter grade:  A

Class name:  bio
Faculty name:  jones
Student name:  gray
Letter grade:  B

Class name:  Bio
Faculty name:  Jones
Student name:  Thomas
Letter grade:  B

Class name:  1
Faculty name:  2
Student name:  0
Letter grade:  0

Class name:  0
Faculty name:  
Student name:  
Letter grade:  

Total As:  
Total Bs:  
Total Cs:  
Total Ds:  
Total Fs:  

Process finished with exit code 0

Tags: namereadlineupperstudentclasswritetotalgrade
2条回答

当您正在读取文件时,您会发现学生数据和总计数据之间有一个空白行,但您尚未写入。 所以while class_name != ''在你整理完整个文件之前不是false。在

在和之间添加一个空白行,您的代码就可以工作了。在

[...]
gradefile.write('\n')
gradefile.write(str(a_total) + '\n')

虽然我现在不在我的开发人员那里,但是我想问题出在for语句上。代替range(1,student_num+1)尝试重写它,以便使用student_num输入值作为迭代次数。根据你写它的方式,我知道发生了什么是for循环错误地计算迭代次数,因为student_num+1。如果用户为student_num输入3,那么3应该是指定的唯一迭代量。在

相关问题 更多 >