簡體   English   中英

如果我有三個不同的文本文件,我該如何閱讀它們,然后對它們進行平均排序?

[英]If I have three different text file how do I read them then sort them by average?

我目前正在編寫一個代碼,讓您問數學問題。 我已將學生分數及其姓名保存在3個不同班級的不同文件夾中。 然后,對於他們完成的每個測試,我都有三個不同的文件。 我想要一個代碼來檢查每個文件中是否包含它們的名稱。 然后,當它檢查名稱是否在每個文件中時,我想從人員結果中讀取所有三個分數。 然后按平均水平對三個分數進行排序並打印出來,但要對進行過三次測試的每個人進行打印。

到目前為止,這是我的代碼,它詢問問題,然后將名稱和分數保存到文件等中:

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()

編輯:了解用戶要執行的操作后,更新了答案。

我對這段代碼的第一個問題是它非常冗余。 Python遵循DRY(請勿重復自己)方法。 提取冗余代碼並從中創建一個函數,然后使用不同的參數多次調用該函數。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM