2016-04-24 4 views
0

Я пытаюсь сортировать словарь «Самый высокий» и «Средний» от наивысшего до самого низкого, но я не могу получить словарь для сортировки из текстового файла. Я не уверен, должен ли я использовать массив вместо этого, или если вокруг есть способ?PYTHON Сортировочный словарь из текстового файла

Это мой код:

import random 
score = 0 
print("Hello and welcome to the maths quiz!") 
while True: 
    position = input("Are you a pupil or a teacher?: ").lower() 
    if position not in ("teacher","pupil"): 
     print ("Please enter 'teacher' or 'pupil'!") 
     continue 
    else: 
     break 

if position == 'pupil': 

your_name = "" 
while your_name == "": 
    your_name = input("Please enter your name:") # asks the user for their name and then stores it in the variable name 

class_no = "" 
while class_no not in ["1", "2", "3"]: 
    class_no = input("Please enter your class - 1, 2 or 3:") # Asks the user for an input 

score = 0 

for _ in range(10): 
    number1 = random.randint(1, 11) 
    number2 = random.randint(1, 11) 
    operator = random.choice("*-+") 
    question = ("{0} {1} {2}".format(number1,operator,number2)) 

    solution = eval(question) 

    answer = input(question+" = ") 

    if answer == str(solution): 
     score += 1 
     print("Correct! Your score is, ", score ,) 

    else: 
     print("Your answer is not correct") 

class_no = ("Class " + class_no + ".txt") 

print("Congratulations {0}, you have finished your ten questions!".format(your_name)) 
if score > 5: 
    print("Your total score is {0} which is over half.".format(score)) 
else: 
    print("Better luck next time {0}, your score is {1} which is lower than half".format(your_name, score)) 

with open(class_no, "a") as Student_Class: 
    Student_Class.write(your_name) 
    Student_Class.write(",") 
    Student_Class.write(str(score)) 
    Student_Class.write("\n") 
else: 
    while True: 
    Group = input("Which class would you like to view first? 1, 2 or 3?: ") 
    if Group not in ("1", "2", "3"): 
     print ("That's not a class!") 
     continue 
    else: 
     break 

Group = ("Class " + Group + ".txt") 

while True: 
    teacherAction = input("How would you like to sort the results? 'alphabetical', 'highest' or 'average'?: ").lower() # Asks the user how they would like to sort the data. Converts answer into lower case to compare easily. 
    if teacherAction not in ("alphabetical","highest","average"): 
     print ("Make sure you only input one of the three choices!") 
     continue 
    else: 
     break 


with open (Group, "r+") as scores: 
    PupilAnswer = {} 
    for line in scores: 
     column = line.rstrip('\n').split(',') 
     name = column[0] 
     score = column[1] 

     score = int(score) 

     if name not in PupilAnswer: 
      PupilAnswer[name] = [] 
     PupilAnswer[name].append(score) 
     if len(PupilAnswer[name]) > 3: 
      PupilAnswer[name].pop(0) 

if teacherAction == 'alphabetical': 
    for key in sorted(PupilAnswer): 
     print(key, PupilAnswer[key]) 

elif teacherAction == 'highest': 
    highest = {} 
    for key, value in PupilAnswer.items(): 
     maximum = max(value) 
     highest[key] = maximum    
    for key in sorted(highest, key=highest.get, reverse=True): 
     print (key, highest[key]) 

else: 
    for name in sorted(PupilAnswer): 
     average = [] 
     for key in (PupilAnswer[name]): 
      average.append(key) 

     length = len(average) 
     total = 0 

     for key in (average): 
      total = total + (key) 
     totalAverage = (total)/length 

     print (name, totalAverage) 

print ("Thank you for using the quiz!") 
input("Press 'enter' to exit!") 
+0

1) отсортировано (d.values ​​()) 2) SortedDict – Andrey

+0

[Словари в Python не могут быть отсортированы!) (Http://code.activestate.com/recipes/52306-to-sort-a-dictionary/) –

+0

Ваш 'for' цикл в' самом высоком' состоянии выглядит неправильно. – Greg0ry

ответ

0

Там нет "отсортированный" в словарях. Они представляют собой набор ключевых ценностей. Неупорядоченный.
Вы можете использовать OrderedDict.

+0

Это не отвечает на вопрос. Словарь нельзя сортировать, однако вы можете отображать элементы по порядку. – Greg0ry

+0

Название: «PYTHON Sorting from the dictionary», первое предложение: «Я пытаюсь сортировать словарь». Как я вижу, это прекрасно отвечает на вопрос. Если вы не согласны, конечно, вы можете снизить ответ – Idos

+0

Нет, если вы прочтете его образец кода, вы поймете, что он не спрашивает, как сортировать словарь, но как отображать его в отсортированном порядке. – Greg0ry

Смежные вопросы