2016-04-24 2 views
0

Я знаю, что это простая ошибка, но смотрел на нее весь день! Где я могу добавить float или int, чтобы предотвратить следующее сообщение об ошибке? int объект не является допустимым.int object is is iterable при использовании словаря

Как напечатать его с самого высокого до самого низкого. Можно ли добавить reverse = True? Я получаю ошибку кортежа. -

scores = {} #You'll need to use a dictionary to store your scores; 

with open("classscores1.txt") as f: 
    for line in f: 
     name, score = line.split() #store the name and score separately (with scores converted to an integer) 
     score = int(score) 
     if name not in scores or scores[name] < score: 
      scores[name] = score # replacing the score only if it is higher: 

    for name in sorted(scores): 
     print(name, "best score is", scores[name]) 
     print("{}'s best score is {}".format(name, max(scores[name]))) 
+4

'int' объекты не повторяются * в любом месте *. – jonrsharpe

+1

'max (баллы [имя])' Здесь 'score [name]' - это всего лишь один балл, 'int'. Должен ли это быть списком баллов для этого имени? –

+0

Последняя строка, которая, предположительно, поднимает ошибку, выглядит так, как будто она должна делать * точно такую ​​же вещь *, как и раньше. Поэтому вы должны просто удалить эту проблемную строку. –

ответ

1

Проблема эта линия:

print("{}'s best score is {}".format(name, max(scores[name]))) 

здесь, вы пытаетесь взять max из scores[name], что только одно целое число. Глядя на коде, кажется, что вы уже позаботились о том значении является максимальным значением, так что вы можете просто изменить эту строку

print("{}'s best score is {}".format(name, scores[name])) 

как в print заявления выше. (Кроме того, поскольку эти две print линии будет печатать то же самое, вероятно, можно удалить один из этих двух.)


Чтобы распечатать его от самого высокого до самого низкого балла, изменить for петлю на что-то вроде этого:

for name in sorted(scores, key=scores.get, reverse=True): 
    ... 

Это сортирует имена в scores с помощью функции scores.get в качестве ключа, т.е. сортирует значения в словаре, и reverse=True делает его рода от самого высокого до самого низкого.

+0

Как напечатать его с самого высокого до самого низкого. Можно ли добавить reverse = True? Я получаю ошибку кортежа. – Canadian1010101

+0

@ Canadian1010101 См. Мое редактирование. –