#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. пожалуйста, примите ответ, если он решил вашу проблему