#python
Вопрос:
Я хочу вернуть новый словарь с буквенными оценками, замененными числовыми оценками
90 для A, 80 для B, 70 для C, 60 для D. Все, что ниже 60, — это Ф.
Пример:
letter_grades({‘Боб’ : 55, ‘Джо’ : 90, ‘Марта’: 86}) возвращает {‘Боб’ : ‘F, ‘Джо’ : ‘A’, ‘Марта’: ‘B’}
Я написал
def letter_grades(adict):
"""
Parameter adict: the dictionary of grades
Precondition: adict is a dictionary with string keys, int values
"""
for a in adict:
for i in adict.values():
if i >= 90:
adict[a] = 'A'
elif i >= 80:
adict[a] = 'B'
elif i >= 70:
adict[a] = 'C'
elif i >= 60:
adict[a] = 'D'
elif i < 60:
adict[a] = 'F'
return adict
Когда я ввожу letter_grades({‘wmw2’ : 55, ‘abc3’ : 90, ‘jms45’: 86})
Я получаю сообщение об ошибке, говорящее:
Ошибка типа: ‘>=’ не поддерживается между экземплярами ‘str’ и ‘int’
может кто-нибудь сказать мне, почему?
Ответ №1:
Я бы попробовал что-нибудь в этом роде. Используйте adict.items()
для просмотра как ключей ( k
), так и значений ( i
). И хорошая идея заключается в том, чтобы включить else
, хотя это ничего не дает (или вы можете вызвать ошибку, если данные плохие).
def letter_grades(adict):
"""
Parameter adict: the dictionary of grades
Precondition: adict is a dictionary with string keys, int values
"""
for k, i in adict.items():
if i >= 90:
adict[k] = 'A'
elif i >= 80:
adict[k] = 'B'
elif i >= 70:
adict[k] = 'C'
elif i >= 60:
adict[k] = 'D'
elif i < 60:
adict[k] = 'F'
else:
pass
return adict
print(letter_grades({'wmw2' : 55, 'abc3' : 90, 'jms45': 86}))
Выход:
{'wmw2': 'F', 'abc3': 'A', 'jms45': 'B'}