2017-08-28 11 views
-1

私は、以下のようにグレードとPythonの辞書は範囲があります。パイソン - グレードの範囲で辞書

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

私は、Pythonにかなり新しいですし、私は私が抽出できるように、この辞書を読むことができるか、疑問に思いました入力番号を比較しながら、各グレードの下限と上限を設定します。私はキーのための単一の値があるときに辞書を扱うことができますが、このシナリオでは、コードを書く方法がわかりません。

あなたが bisectモジュールから bisect()メソッドを使用することができます
+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") 

(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

ありがとう、私はこのようなものを探していた。私の唯一の問題は、2つの境界を分離する方法がわからないことでした。 –

2

:あなたが希望する場合は、あなたも、同時に両方の境界線を抽出することができる

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

ありがとうございます。私は似たような解決策を探していました。 –

関連する問題