2017-08-28 79 views
-1

我有甲级Python字典范围,如下图所示:的Python - 字典与等级范围

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

我是相当新的Python和在想,我怎么能读这本字典,这样我可以提取下边界以及每个等级的上边界,同时比较输入的数字。当有一个键值时,我能够处理字典,但在这种情况下,我不确定如何编写代码。

+0

嗨,请看看https://stackoverflow.com/help/how-to-ask。你应该包括一些解决问题的代码/尝试。 – dhdavvie

+4

'grade_boundaries [“A”]'返回'[70,100]',这是一个列表,所以你已经得到了两个边界。如果你想使用特定的,你可以使用'grade_boundaries [“A”] [0]',它返回'70'。 – Zinki

+0

你是否想要一个可以输入数字并输出等级的函数? – Zevgon

回答

0
if value >= grade_boundaries['A'][0] and value <= grade_boundaries['A'][1]: 
    print("value is in grade 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

谢谢,我正在寻找这样的事情。我唯一的问题是我不确定如何隔离这两个界限。 –

2

您可以使用bisect()方法从bisect模块:

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

如果你想比较:

from bisect import bisect 

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

grades[bisect([30, 40, 50, 60, 70], score)] 
#B 
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') 
+0

谢谢。我正在寻找类似的解决方案。 –