Зацикливание по словарю и ошибке типа: ‘>=’ не поддерживается между экземплярами ‘str’ и ‘int’ — Python

#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'}