ランク別に集計せよ
中段 / 目安 30分
松田さんが景品カタログを広げています。「ランクごとに何人いるか知りたい。ゴールドが増えたら景品を仕入れんと」。人数が分からないまま仕入れると、余るか足りないかのどちらかです。
渡されるのは会員の保有ポイントが並んだリストです。1人ずつランクに直して、ランクごとに数え上げます。
完成条件
保有ポイントのリストを受け取り、ランクごとの人数を辞書で返す関数 count_by_rank(members) を作ってください。
- 返す辞書のキーは
ゴールド、シルバー、ブロンズの3つです - 0人のランクもキーを残し、値を
0にします。景品の発注書は空欄より0のほうが読み違えません - ランクの判定は問6の
get_rank(points)を準備済みのコードとして再利用します - 判定の基準は問6と同じで、1000以上がゴールド、500以上がシルバー、それ未満がブロンズです
辞書のキーと値
辞書は名前で値を取り出せる箱です。{キー: 値} で作り、辞書[キー] で値を読み書きします。別の題材として、貸し出した本の種類を数えます。
Python
loans = {"小説": 0, "図鑑": 0}
category = "図鑑"
loans[category] += 1
print(loans["図鑑"]) # 1
print(loans["小説"]) # 0変数 category に入った文字列もキーにできます。用意していないキーを読むとエラーになるので、今回は数えたい種類を最初から0で用意します。会員ランクを判定する get_rank と結果の箱はひな形にあります。自分で書くのは、繰り返し、ランクを求める呼び出し、その人数への加算です。
進め方
ひな形の「ここに書く」を完成させてください。準備済みのコードはそのまま使えます。手が止まったら、①方針、②使う構文、③部分解の順にヒントを開けます。
数分考えて手が止まったら、①から確認してください。本文の別の題材の例を動かし、今回の値に置き換えて考えましょう。
数え方は2通りあります。3つのキーを最初から0で用意しておく道と、出てきたキーをその都度足す道です。今回は0人のランクも残す約束なので、前者のほうが素直に収まります。
今回のひな形には3つのキーを用意してあります。新しいキーを追加する処理は要りません。
要件
- 準備済みの get_rank(points) を count_by_rank の中から呼び出すこと
- count_by_rank(members) は members に並んだポイントを1件ずつランクへ直して数えること
- 返す辞書はゴールド・シルバー・ブロンズの3つのキーを必ず持つこと
- 該当者がいないランクは値を 0 にすること
ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです
ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
編集 ゆめさく編集部