Python 重新排列文件
我有一段代码(见下文),它使我能够问学生一系列随机问题,然后将他们的姓名和分数保存到一个文件中。我将name和score组合成一个名为info的变量,名称排在前面,然后是score。我现在需要按照分数的顺序对这些信息进行排序。有没有一种方法可以让分数暂时放在整个文件的名称前面,这样我就可以使用排序函数使它从最低到最高 任何帮助都将不胜感激!!!多谢各位Python 重新排列文件,python,file,Python,File,我有一段代码(见下文),它使我能够问学生一系列随机问题,然后将他们的姓名和分数保存到一个文件中。我将name和score组合成一个名为info的变量,名称排在前面,然后是score。我现在需要按照分数的顺序对这些信息进行排序。有没有一种方法可以让分数暂时放在整个文件的名称前面,这样我就可以使用排序函数使它从最低到最高 任何帮助都将不胜感激!!!多谢各位 import random import time Name=input("What is your name?") Class=input(
import random
import time
Name=input("What is your name?")
Class=input("Are you in Class A, B or C?")
print("Welcome" ,Name, "to the Maths Quiz!!")
time.sleep(3)
QuestionNumber=0
Operations=["+","-","x"]
answer=0
score=0
while QuestionNumber < 10:
Num1=random.randint(1,12)
Num2=random.randint(1,12)
QuestionNumber=QuestionNumber+1
operation = random.choice(Operations)
print("What is", Num1 ,operation, Num2)
guess=int(input("What is the answer to this question?"))
if operation =="+":
answer=Num1+Num2
elif operation =="-":
answer=Num1-Num2
elif operation =="x":
answer=Num1*Num2
if guess==answer:
score=score+1
print ("Correct")
else:
print("Incorrect")
print("Well done You got", score, "Out of 10!!")
score=str((score))
Info= (Name + (" ") + score)
if Class=="A":
ClassA=open("Class A Results.txt","a")
ClassA.write(Info)
ClassA.write(" \n")
ClassA.close()
elif Class=="B":
ClassB=open("Class B Results.txt","a")
ClassB.write(Info)
ClassB.write(" \n")
ClassB.close()
elif Class=="C":
ClassC=open("Class C Results.txt","a")
ClassC.write(" \n")
ClassC.write(Info)
ClassC.close()
Viewscores=input("Do you want to see previous scores? Y/N")
if Viewscores=="Y":
Classresults=input("Which Class would you like to see the results of?")
else:
print ("Thank you for using the maths quiz, press enter to close the program in 10 seconds")
time.sleep(10)
closeprogram=input("Hit enter")
if Classresults=="A":
ClassA=open("Class A Results.txt","r")
Class=Class
alphabet=ClassA.readlines()
for line in sorted(alphabet):
print(line)
elif Classresults=="B":
ClassB=open("Class B Results.txt","r")
Class=ClassB
alphabet=ClassB.readlines()
for line in sorted(alphabet):
print(line)
elif Classresults=="C":
ClassC=open("Class C Results.txt","r")
Class=ClassC
alphabet=ClassC.readlines()
for line in sorted(alphabet):
print(line)
else:
print ("That is not valid")
随机导入
导入时间
Name=输入(“你叫什么名字?”)
Class=输入(“您是在A类、B类还是C类?”)
打印(“欢迎”,姓名,“参加数学测验!!”)
时间。睡眠(3)
问题编号=0
操作=[“+”、“-”、“x”]
答案=0
分数=0
当问题编号<10时:
Num1=random.randint(1,12)
Num2=random.randint(1,12)
问题编号=问题编号+1
操作=随机。选择(操作)
打印(“是什么”,Num1,操作,Num2)
guess=int(输入(“这个问题的答案是什么?”)
如果操作==“+”:
答案=Num1+Num2
elif运算==“-”:
答案=Num1-Num2
elif操作==“x”:
答案=Num1*Num2
如果猜测==答案:
分数=分数+1
打印(“正确”)
其他:
打印(“不正确”)
打印(“做得好”,得分,“满分!!”)
分数=str((分数))
信息=(姓名+(“”)+分数)
如果类别==“A”:
ClassA=打开(“ClassA Results.txt”、“A”)
ClassA.write(信息)
ClassA.write(“\n”)
ClassA.close()
elif类==“B”:
ClassB=打开(“ClassB Results.txt”、“a”)
类B.写入(信息)
ClassB.写入(“\n”)
ClassB.close()
elif类==“C”:
ClassC=打开(“ClassC Results.txt”、“a”)
ClassC.写入(“\n”)
类C.写入(信息)
ClassC.close()
Viewscores=输入(“您想查看以前的分数吗?是/否”)
如果Viewscores==“Y”:
Classresults=input(“您希望查看哪个类的结果?”)
其他:
打印(“感谢您使用数学测验,按enter键可在10秒内关闭程序”)
时间。睡眠(10)
关闭程序=输入(“点击输入”)
如果Classresults==“A”:
ClassA=打开(“ClassA Results.txt”、“r”)
Class=Class
字母表=ClassA.readlines()
对于已排序的行(字母):
打印(行)
elif Classresults==“B”:
ClassB=打开(“ClassB Results.txt”、“r”)
Class=ClassB
字母表=ClassB.readlines()
对于已排序的行(字母):
打印(行)
elif Classresults==“C”:
ClassC=打开(“ClassC Results.txt”、“r”)
类别=类别C
字母表=ClassC.readlines()
对于已排序的行(字母):
打印(行)
其他:
打印(“无效”)
排序
的键
函数可以为您实现这一点,但如果您没有将它们组合成单个字符串,而是存储成对的元组
则更好。使用操作符.itemgetter
可以很好地概括。而不是存储:
score = str(score)
Info = Name + " " + score
商店:
Info = (Name, score) # Score remains a float
然后,当您需要排序时,请执行以下操作:
# Imports at top of file, not each sort
from operator import itemgetter
...
for name, score in sorted(myunorderedinfo, key=itemgetter(1, 0)):
在您提供的代码中,您正在写入一个文件并进行读回(这将需要重新分类),因此您可能需要查看
csv
模块以存储具有正确格式的对(简单的空格分隔很容易搞乱);在这种情况下,您必须将输入转换回float
,因为csv.reader
会传回str
的list
s,但是用一个简单的生成器表达式(作为练习)就相对容易了,通过删除所有重复的代码,您可以使代码更加整洁:
VALID_CLASS_NAMES = {"A", "B", "C"}
if Classresults not in VALID_CLASS_NAMES:
print("Invalid class results selection")
raise Exception("BOOM")
filename = "Class {} Results.txt".format(Classresults)
with open(filename, "r") as class_results_file:
alphabet=class_results_file.readlines()
for line in sorted(alphabet):
print(line)
现在,如果您添加了类“D”,则只需将其添加到有效的类名集中。请阅读,不要将变量命名为
class
(它非常接近内置的类
关键字,避免使用像名称
这样的通用变量名,像瞳孔名称
这样的名称会更好。