У меня есть словарь Python с рангами, как показано ниже:

grade_boundaries = {
    'A': [70, 100],
    'B': [60, 69],
    'C': [50, 59],
    'D': [40, 49],
    'E': [30, 39],
    'F': [0, 29],
}

Я довольно новичок в Python и мне было интересно, как я могу прочитать этот словарь, чтобы я мог извлечь нижнюю границу, а также верхнюю границу для каждого класса при сравнении входного числа. Я могу обрабатывать словарь, когда для ключа есть единственное значение, но в этом сценарии я не уверен, как написать код.

-1
Abhik Sengupta 28 Авг 2017 в 13:59

3 ответа

Лучший ответ
if value >= grade_boundaries['A'][0] and value <= grade_boundaries['A'][1]:
    print("value is in grade A")

При желании вы можете извлечь обе границы одновременно:

(lower_bound, upper_bound) = grade_boundaries['A']

Если вы хотите сравнить все сразу:

for grade in grade_boundaries:
    if value >= grade_boundaries[grade][0] and value <= grade_boundaries[grade][1]:
        print("value is in grade " + grade)
0
Honza Zíka 28 Авг 2017 в 11:14

Похоже, вы хотите получить буквенную оценку из числа? Если это так, это должно сработать:

GRADE_BOUNDARIES = {
    'A': [70, 100],
    'B': [60, 69],
    'C': [50, 59],
    'D': [40, 49],
    'E': [30, 39],
    'F': [0, 29],
}

def get_grade(number_grade):
    for letter, bounds in GRADE_BOUNDARIES.items():
        if number_grade >= bounds[0] and number_grade <= bounds[1]:
            return letter
    raise ValueError('Invalid number grade')
0
Zevgon 28 Авг 2017 в 11:17

Вы можете использовать метод bisect() из модуля bisect:

from bisect import bisect

grades='FEDCBA' #or you can use 'ABCDEF'[::-1]
score = 62

grades[bisect([30, 40, 50, 60, 70], score)]
#B
2
zipa 28 Авг 2017 в 11:14