質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

407閲覧

dictの点数を成績に変えたい

ROTAREN

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/12 12:59

編集2020/10/12 13:00

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takutakuya

2020/10/12 16:30

「うまくいきませんでした。」とあるので、試したこと、試した結果なども書くとよかったですね。
guest

回答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

copepoda

総合スコア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

lehshell

総合スコア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

toast-uz

総合スコア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

takutakuya

総合スコア979

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問