scoredict = {a:95,b:68,c:83,d:73,d.....}
のような点数の辞書を
90点以上がS
80点以上89点以下がA
70点以上79点以下がBのように成績分けをして
gradedict = {a:S,b:C,c:A,d:B....}のように表示されるようにしたいです。
for name,score in scoredict.items():
でifで分類をしたのですが、うまくいきませんでした。
詳しくお願いしたいです!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
bisectモジュールを使用した例です。
python
1from bisect import bisect 2 3def grade(score): 4 """点数から成績を求めます 5 6 Args: 7 score (int): 点数 8 Returns: 9 str: 成績 10 Examples: 11 >>> list(map(grade, [100, 95, 90, 89, 80, 79, 70, 69, 1])) 12 ['S', 'S', 'S', 'A', 'A', 'B', 'B', 'C', 'C'] 13 """ 14 return 'CBAS'[bisect([70, 80, 90], score)] 15 16def to_grade_dict(score_dict): 17 """点数dictをもとに成績dictを作成します 18 19 Args: 20 score_dict (dict[str, int]): 点数の`dict` 21 Returns: 22 dict[str, str]: 成績の`dict` 23 Examples: 24 >>> to_grade_dict({'a': 95, 'b': 68, 'c': 83, 'd': 73 }) 25 {'a': 'S', 'b': 'C', 'c': 'A', 'd': 'B'} 26 """ 27 return dict(zip(score_dict.keys(), map(grade, score_dict.values()))) 28 29scoredict = {'a': 95, 'b': 68, 'c': 83, 'd': 73 } 30gradedict = to_grade_dict(scoredict) 31 32print(gradedict) # -> {'a': 'S', 'b': 'C', 'c': 'A', 'd': 'B'}
投稿2020/10/12 16:53
総合スコア324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
参考までに辞書内包表記版です。
scores = {'a':95,'b':68,'c':83,'d':73} grade_def = {'S':90,'A':80,'B':70,'C':60,'Z':0} lst = sorted(grade_def.items(), key = lambda x:x[1]) gradedict = {name: x for name, score in scores.items() for x, y in lst if score >= y} print(gradedict) # {'a':'S', 'b':'C', 'c':'A', 'd':'B'}
投稿2020/10/12 15:19
総合スコア1156
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんなコードになります。変数名は趣味でなおしました。
リスト内包表現のところが少しトリッキーかもです。
Python
1scores = {'a':95,'b':68,'c':83,'d':73} 2grade_def = {'s':90,'a':80,'b':70,'c':60,'z':0} 3grades = {} 4for name,score in scores.items(): 5 grade = [x for x, y in grade_def.items() if score >= y][0] 6 grades[name] = grade 7print(grades)
投稿2020/10/12 13:34
総合スコア3266
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
シンプルに書いてみました。
Python
1scoredict = {'a':95, 'b':68, 'c':83, 'd':73} 2 3gradedict = {} 4 5for name, score in scoredict.items(): 6 if score >= 90: 7 gradedict[name] = 'S' 8 elif score >= 80: 9 gradedict[name] = 'A' 10 elif score >= 70: 11 gradedict[name] = 'B' 12 else: 13 gradedict[name] = 'C' 14 15print(scoredict) 16print(gradedict) 17 18# 出力結果 19# {'a': 95, 'b': 68, 'c': 83, 'd': 73} 20# {'a': 'S', 'b': 'C', 'c': 'A', 'd': 'B'}
投稿2020/10/12 13:41
総合スコア979
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。