2017-08-28 78 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

謝謝。我正在尋找類似的解決方案。 –