Вы можете использовать словарь для хранения информации об аттестации, но это не дает никаких преимуществ, поскольку вы не можете использовать быстрый поиск по словарю с этими диапазонами.Вместо этого я бы предложил использовать отсортированный список из (points, grade)
пар, а затем использовать bisect
для бинарного поиска совпадений в O (logn).
>>> import bisect
>>> grade_ranges = [(0, 0), (64.5, 2.5), (68.5, 2.83), (69.5, 3.16),
... (72.5, 3.5), (76.5, 3.83), (79.5, 4.16), (82.5, 4.5),
... (86.5, 4.83), (89.5, 5.16), (92.5, 5.5), (96.5, 5.83)]
...
>>> points, grade = zip(*grade_ranges)
>>> grade[bisect.bisect(points, 96.5)-1]
5.83
>>> grade[bisect.bisect(points, 73)-1]
3.5
>>> grade[bisect.bisect(points, 30)-1]
0
Распаковкаgrade_ranges
до points
и scores
здесь необязательны, но ИМХО это немного чище.Если вы не разархивируете, вам придется передать кортеж на bisect
, например bisect(grade_ranges, (55,))