Python 重新排列文件

Python 重新排列文件,python,file,Python,File,我有一段代码(见下文),它使我能够问学生一系列随机问题,然后将他们的姓名和分数保存到一个文件中。我将name和score组合成一个名为info的变量,名称排在前面,然后是score。我现在需要按照分数的顺序对这些信息进行排序。有没有一种方法可以让分数暂时放在整个文件的名称前面,这样我就可以使用排序函数使它从最低到最高 任何帮助都将不胜感激!!!多谢各位 import random import time Name=input("What is your name?") Class=input(

我有一段代码(见下文),它使我能够问学生一系列随机问题,然后将他们的姓名和分数保存到一个文件中。我将name和score组合成一个名为info的变量,名称排在前面,然后是score。我现在需要按照分数的顺序对这些信息进行排序。有没有一种方法可以让分数暂时放在整个文件的名称前面,这样我就可以使用排序函数使它从最低到最高

任何帮助都将不胜感激!!!多谢各位

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
(它非常接近内置的
关键字,避免使用像
名称
这样的通用变量名,像
瞳孔名称
这样的名称会更好。