您好我正在尝试对从数据文件中读取的列表上的两个字段进行排序。现在虽然排序工作正常我想要实现的是:我有三个字段 - Classcode,Name,Score。现在程序首先在名称字段上排序,然后按升序对排名字段进行排序。但是,我无法按降序对得分字段进行排序。
我的代码是:
import random
q=0
ans=0
studentnames = []
ascending = []
classcode = input("Enter your class (1,2 or 3): ")
if classcode == '1':
name=input("Enter your name: ")
n= int(input("Enter the number of questions you want to attempt: "))
#writing details to a txt file group1
text_file1 = open("data.dat", "a")
while q<n:
c = random.randint(1,3)
print("c is: ", c)
if c==1:
f="+"
num1 = random.randint(0,12)
print("num1 is: ", num1)
num2 = random.randint(0,10)
print("num2 is: ", num2)
product=num1*num2
difference=num1-num2
total=num1+num2
d=total
q+=1
print("\n Question ", q)
print ("What is ",num1,f,num2," ? ")
l=int(input("Enter Your Answer: "))
if l==d:
print ("\nCongratulations! your answer is right.\n")
ans+=1
else:
print("\n I'm afraid your answer is wrong. The correct one is" ,d)
elif c==2:
f="*"
num1 = random.randint(0,12)
print("num1 is: ", num1)
num2 = random.randint(0,10)
print("num2 is: ", num2)
product=num1*num2
difference=num1-num2
total=num1+num2
d=product
q+=1
print("\n Question ", q)
print ("What is ",num1,f,num2," ? ")
l=int(input("Enter Your Answer: "))
if l==d:
print ("\nCongratulations! your answer is right.\n")
ans+=1
else:
print("\n I'm afraid your answer is wrong. The correct one is" ,d)
else:
f="-"
num1 = random.randint(0,12)
print("num1 is: ", num1)
num2 = random.randint(0,10)
print("num2 is: ", num2)
product=num1*num2
difference=num1-num2
total=num1+num2
d=difference
q+=1 # counter for questions
print("\n Question ", q)
print ("What is ",num1,f,num2," ? ")
l=int(input("Enter Your Answer: "))
if l==d:
print ("\nCongratulations! your answer is right.\n")
ans+=1 # counter for answers
else:
print("\n I'm afraid your answer is wrong. The correct one is" ,d)
# calculating the percentage
x=float(ans)
y=float(q)
z=ans*100/q
cp=int(z)
print("Your Correct percentage = ",cp,"%\n")
#store details in a list
scores=[classcode,name,cp]
print(scores)
#writing to text file
text_file1.write(classcode )
text_file1.write(' ')
text_file1.write(name )
text_file1.write(' ')
#converting score to string so that it can be written to txt file
scr = str(cp)
text_file1.write(scr )
#adding a new line after each students score
text_file1.write("\n")
#close the txt file after it has been used
text_file1.close()
#reading the txt file
text_file1 = open("data.dat", "r")
print(text_file1.read())
text_file1.close()
import operator
with open("data.dat") as f:
students = []
for line in f:
fields = line.split()
students.append( (fields[0], fields[1], int(fields[2])) )
# sort by the student's name
sortedByName = sorted(students, key=operator.itemgetter(1,2))
for r in sortedByName:
classcode, name, score = r
print("name:", name, "classcode:", classcode, "score:", score)
它输出的日期是: 名称:1类代码:1分:100
name:2 classcode:1得分:100
name:aguero classcode:1得分:50
name:aguero classcode:1得分:100
name:aguero classcode:1得分:100
name:aguero classcode:1得分:100
姓名:alanshearer类代码:1分:100
name:deniro classcode:1得分:100
name:deniro classcode:1得分:100
name:fabregas classcode:1得分:0
name:fabregas classcode:1得分:100
姓名:maradonna类代码:1分:100
姓名:maradonna类代码:1分:100
姓名:maradonna类代码:1分:100
name:messi classcode:1得分:100
name:messi classcode:1得分:100
name:pacino classcode:1得分:50
名称:pacino classcode:1得分:66
name:ronaldo classcode:1得分:33
name:ronaldo classcode:1得分:66
name:ronaldo classcode:1得分:66
name:ronaldo classcode:1得分:100
name:ronaldo classcode:1得分:100
name:ronaldo classcode:1得分:100
name:rooney classcode:1得分:50
name:rooney classcode:1得分:100
name:rooney classcode:1得分:100
name:rooney classcode:1得分:100
name:rooney classcode:1得分:100
name:rooney classcode:1得分:100
name:test1 classcode:1得分:100
name:test1 classcode:1得分:100
name:test2 classcode:1得分:100
name:test2 classcode:1得分:100
name:test3 classcode:1得分:20
name:test3 classcode:1得分:50
name:test3 classcode:1得分:60
name:test4 classcode:1得分:50
name:test4 classcode:1得分:60
name:test5 classcode:1得分:33
name:vanpersie classcode:1得分:100
name:vanpersie classcode:1得分:100
name:vanpersie classcode:1得分:100
name:vanpersie classcode:1得分:100
name:vanpersie classcode:1得分:100
name:vidal classcode:1得分:50
name:vidal classcode:1得分:50
name:vidal classcode:1得分:50
name:vidal classcode:1得分:50
name:vidal classcode:1得分:66
name:vidal classcode:1得分:100
name:vidal classcode:1得分:100
name:vidal classcode:1得分:100
name:yaya classcode:1得分:0
name:yaya classcode:1得分:50
name:yaya classcode:1得分:100
name:yaya classcode:1得分:100
name:yaya classcode:1得分:100
我想要实现的是按名称递增(目前是正常的)和按降序得分,这是我无法做到的。
由于