Программа на Python для ввода данных учащихся с их отметками в текстовый файл и другой файл, содержащий учащихся с уменьшающимся процентом

#python

Вопрос:

 import pickle
while True:
    print('''    1. Create Binary File.
    2.  Display the File.
    3.  Details of a particular student
    4.  Overall Topper and Subject-wise Topper
    5.  Students with percentage in decreasing order''')
    a=int(input('choose a command (1-8): '))
    if a==1:
        f=open('student.dat','wb')
        o=open('suiuii.dat','wb')
        x=int(input('How many student: '))
        for i in range(x):
            name=input('Name: ')
            phy=int(input('Physics Mark: '))
            chem=int(input('Chemistry Mark: '))
            cs=int(input('CS Mark: '))
            maths=int(input('Maths Mark: '))
            english=int(input('English Mark: '))
            total=phy chem cs maths english
            per=(total / 500) * 100
            if total<45:
                grade="FAIL"
            if total>=45:
                grade="D"
            if total>60:
                grade="C"
            if total>75:
                grade="B"
            if total>90:
                grade="A"
            t=[name,phy,chem,cs,maths,english,total,str(per) "%",grade]
            g=[str(per) "%"]
            pickle.dump(g,o)
            pickle.dump(t,f)
        f.close()
    elif a==2:
        f=open('student.dat','rb')
        try:
            while True:
                p=pickle.load(f)
                print(p)
        except:
            f.close()
    elif a==3:
        f=open('student.dat','rb')
        find=input('Name: ')
        while True:
            p=pickle.load(f)
            if p[0]==find:
                print(p)
                break
        f.close()
 

Я попытался решить 4-й и 5-й варианты, которые заключаются в том, чтобы получить общую начальную и тематическую начальную часть в текстовом файле и распечатать учащихся с уменьшающимся процентом в другом файле, но я этого не понял.
Пожалуйста, помогите мне решить эту проблему

Ответ №1:

рассол-не самый простой способ сделать это, но для целей обучения вы можете найти макса и отсортировать, используя ту же функцию лямбда:

     elif a==4:
        f=open('student.dat','rb')
        all_students = []
        while True:
            try:
                all_students.append(pickle.load(f))
            except EOFError:
                break
        # getting student with highest total (index 6) and printing their name (index 0)
        print(max(all_students, key=lambda x: x[6])[0])
        f.close()
    elif a==5:
        f=open('student.dat','rb')
        all_students = []
        while True:
            try:
                all_students.append(pickle.load(f))
            except EOFError:
                break
        # sorting all students according to their grade
        all_students.sort(key=lambda x: x[6], reverse=True)
        for stud in all_students:
            # print name and percentage:
            print(f"{stud[0]}: {stud[7]}")
        f.close()
 

Комментарии:

1. пожалуйста, примите ответ, если он решил вашу проблему