Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我有三个不同的文本文件,我如何读取它们,然后按平均值排序?_Python_File_Sorting_Text Files_Average - Fatal编程技术网

Python 如果我有三个不同的文本文件,我如何读取它们,然后按平均值排序?

Python 如果我有三个不同的文本文件,我如何读取它们,然后按平均值排序?,python,file,sorting,text-files,average,Python,File,Sorting,Text Files,Average,我现在正在写一个代码,你可以问数学问题。我已经将学生的分数和他们的名字保存在3个不同班级的不同文件夹中。然后,对于他们所做的每个测试,我有三个不同的文件。我想要一个代码来检查他们的名字是否在每个文件中。然后,当它检查每个文件中是否有该名称时,我希望读取persons结果中的所有三个分数。然后按平均数对三个分数进行排序并打印出来,但每个人都做了三次测试 这是我到目前为止提出问题的代码,然后将姓名和分数保存到文件中,等等: import random Name =input("What is yo

我现在正在写一个代码,你可以问数学问题。我已经将学生的分数和他们的名字保存在3个不同班级的不同文件夹中。然后,对于他们所做的每个测试,我有三个不同的文件。我想要一个代码来检查他们的名字是否在每个文件中。然后,当它检查每个文件中是否有该名称时,我希望读取persons结果中的所有三个分数。然后按平均数对三个分数进行排序并打印出来,但每个人都做了三次测试

这是我到目前为止提出问题的代码,然后将姓名和分数保存到文件中,等等:

import random

Name =input("What is your name?")
Class =input("What class are you in? (1/2/3)")
TimesDone = input("How many times have you done the test before(1-3)")

Score = 1
Questions = 1

while Questions < 10:
    Randomnumber1 = (random.randint(1,10))
    Randomnumber2 = (random.randint(1,10))

Operators = ['+','-','*']
Operators1 = random.choice(Operators)

print(Randomnumber1, Operators1, Randomnumber2)

if Operators1 == '+':
    answer = (Randomnumber1 + Randomnumber2)
elif Operators1 == '-':
    answer = (Randomnumber1 - Randomnumber2)
elif Operators1 == '*':
    answer = (Randomnumber1 - Randomnumber2)

UserGuess = int(input("What is the answer to the question?"))

if UserGuess == answer:
    print("Well done",Name,"you got the correct answer!")
    Questions = Questions+1
    Score = Score+1
else:
    print("Wrong answer",Name,"the correct answer is",answer,".")
    Questions = Questions+1

if Questions == 10:
    print("You answered all 10 questions and your final score",Score,".")

if Class == '1':
    if TimesDone == '1':
        myfile = open('namesforclass1test1.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass1test1.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()            
    elif TimesDone == '2':
        myfile = open('namesforclass1test2.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass1test2.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()            
    elif TimesDone == '3':
        myfile = open('namesforclass1test3.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass1test3.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()            
elif Class == '2':
    if TimesDone == '1':
        myfile = open('namesforclass2test1.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass2test1.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()
    elif TimesDone == '2':
        myfile = open('namesforclass2test2.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass2test2.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()
    elif TimesDone == '3':
        myfile = open('namesforclass2test3.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass2test3.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()
elif Class == '3':
    if TimesDone == '1':
        myfile = open('namesforclass3test1.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass3test1.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()

    elif TimesDone == '2':
        myfile = open('namesforclass3test2.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass3test2.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()
    elif TimesDone == '3':
        myfile = open('namesforclass3test3.txt','a')
        names = (Name)
        myfile.write(repr(names))
        myfile.write('\n')
        myfile.close()

        myfile = open('scoresforclass3test3.txt','a')
        scores = (Score)
        myfile.write(repr(scores))
        myfile.write('\n')
        myfile.close()
随机导入
Name=输入(“你叫什么名字?”)
Class=输入(“你在哪个班?(1/2/3)”)
TimesDone=输入(“您在(1-3)之前做过多少次测试”)
分数=1
问题=1
当问题<10时:
Randomnumber1=(random.randint(1,10))
Randomnumber2=(random.randint(1,10))
运算符=['+'、'-'、'*']
运算符1=随机。选择(运算符)
打印(Randomnumber1、运算符1、Randomnumber2)
如果运算符1=='+':
答案=(随机数1+随机数2)
elif运算符1='-':
答案=(随机数1-随机数2)
elif运算符1='*':
答案=(随机数1-随机数2)
UserGuess=int(输入(“问题的答案是什么?”)
如果UserGuess==答案:
打印(“做得好”,姓名,“你得到了正确的答案!”)
问题=问题+1
分数=分数+1
其他:
打印(“错误答案”,名称,“正确答案是”,答案,”)
问题=问题+1
如果问题==10:
打印(“您回答了所有10个问题和您的最终分数”,分数,”)
如果类==“1”:
如果TimesDone==“1”:
myfile=open('namesforclassatest1.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass1test1.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“2”:
myfile=open('namesforclassatest2.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass1test2.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“3”:
myfile=open('namesforclassatest3.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass1test3.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif类==“2”:
如果TimesDone==“1”:
myfile=open('namesforclass2test1.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass2test1.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“2”:
myfile=open('namesforclass2test2.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass2test2.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“3”:
myfile=open('namesforclass2test3.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass2test3.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif类==“3”:
如果TimesDone==“1”:
myfile=open('namesforclass3test1.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass3test1.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“2”:
myfile=open('namesforclass3test2.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass3test2.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()
elif TimesDone==“3”:
myfile=open('namesforclass3test3.txt','a')
名称=(名称)
myfile.write(repr(名称))
myfile.write(“\n”)
myfile.close()
myfile=open('scoresforclass3test3.txt','a')
分数=(分数)
myfile.write(repr(分数))
myfile.write(“\n”)
myfile.close()

编辑:在了解用户试图做什么之后,更新答案

这段代码的第一个问题是它非常冗余。Python遵循干式(不要重复自己)方法。取出冗余代码,从中创建一个函数,并使用不同的参数多次调用该函数。例如:

def write_data_to_file(filename, data):
    myfile = open(filename,'a')
    myfile.write(repr(data))
    myfile.write('\n')
    myfile.close()
# Instead/ Before storing the data in to text files, store them in dictonaries.
student_score_dict_timesdone_1.update({name: score))
student_score_dict_timesdone_2.update({name: score))
student_score_dict_timesdone_3.update({name: score))

def merged_scores(student_score_dict_timesdone_1,student_score_dict_timesdone_2,student_score_dict_timesdone_3):
    keys_list=[]
    keys_list.append(student_score_dict_timesdone_1.keys())
    keys_list.append(student_score_dict_timesdone_2.keys())
    keys_list.append(student_score_dict_timesdone_3.keys())
    keys_list=list(set(keys_list))
    master_dict = {}
    for key in key_list():
        scores_list=[]
        if key in student_score_dict_timesdone_1:
           scores_list.append(student_score_dict_timesdone_1[key])
        if key in student_score_dict_timesdone_2:
           scores_list.append(student_score_dict_timesdone_2[key])
        if key in student_score_dict_timesdone_3:
           scores_list.append(student_score_dict_timesdone_3[key])
        master_dict.update({name:scores_list})
return master_dict

def average_scores(master_dict):
    average_score_dict={}
    for key in master_dict:
        key_average_score=sum(master[key])/len(master[key]) # This is integer division. Hence only floor values would be saved.
        average_score_dict.update({key:key_average_score})
    return average_score_dict
接下来,我将对您用于解决此问题的数据结构进行更改。使用列表字典将对我们有所帮助。例如:

def write_data_to_file(filename, data):
    myfile = open(filename,'a')
    myfile.write(repr(data))
    myfile.write('\n')
    myfile.close()
# Instead/ Before storing the data in to text files, store them in dictonaries.
student_score_dict_timesdone_1.update({name: score))
student_score_dict_timesdone_2.update({name: score))
student_score_dict_timesdone_3.update({name: score))

def merged_scores(student_score_dict_timesdone_1,student_score_dict_timesdone_2,student_score_dict_timesdone_3):
    keys_list=[]
    keys_list.append(student_score_dict_timesdone_1.keys())
    keys_list.append(student_score_dict_timesdone_2.keys())
    keys_list.append(student_score_dict_timesdone_3.keys())
    keys_list=list(set(keys_list))
    master_dict = {}
    for key in key_list():
        scores_list=[]
        if key in student_score_dict_timesdone_1:
           scores_list.append(student_score_dict_timesdone_1[key])
        if key in student_score_dict_timesdone_2:
           scores_list.append(student_score_dict_timesdone_2[key])
        if key in student_score_dict_timesdone_3:
           scores_list.append(student_score_dict_timesdone_3[key])
        master_dict.update({name:scores_list})
return master_dict

def average_scores(master_dict):
    average_score_dict={}
    for key in master_dict:
        key_average_score=sum(master[key])/len(master[key]) # This is integer division. Hence only floor values would be saved.
        average_score_dict.update({key:key_average_score})
    return average_score_dict

很抱歉,我在复制代码时遇到了问题。(先别管类函数了)我有三个.txt文件,其中分数在,名字在。我想要一个可以读取所有文件并将文件合并为一个文件的代码(用于名称和分数),然后我想要代码能够从每个参加测试的人的三个分数中找到平均值。如果可能的话?谢谢你的帮助我现在就试试:)