Python - 成绩范围

时间:2017-08-28 10:59:49

标签: python

我有一个带有成绩范围的python字典,如下所示:

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

我对Python很新,并且想知道,我如何阅读这本词典,以便我可以在比较输入数字的同时提取每个等级的下边界和上边界。当密钥有单个值时,我能够处理字典,但在这种情况下,我不知道如何编写代码。

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

听起来你想从一个等级获得一个字母等级?如果是这样,这应该可以解决问题:

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')