ランク別に集計せよ
中段 / 目安 30分
松田さんが景品カタログを広げています。「ランクごとに何人いるか知りたい。ゴールドが増えたら景品を仕入れんと」。人数が分からないまま仕入れると、余るか足りないかのどちらかです。
渡されるのは会員の保有ポイントが並んだリストです。1人ずつランクに直して、ランクごとに数え上げます。
完成条件
保有ポイントのリストを受け取り、ランクごとの人数を辞書で返す関数 count_by_rank(members) を作ってください。
- 返す辞書のキーは
ゴールド、シルバー、ブロンズの3つです - 0人のランクもキーを残し、値を
0にします。景品の発注書は空欄より0のほうが読み違えません - ランクの判定は問6の
get_rank(points)をそのまま持ってきて再利用します - 判定の基準は問6と同じで、1000以上がゴールド、500以上がシルバー、それ未満がブロンズです
進め方
白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。
開かずに10分粘って進まないなら、①だけ開けてください。粘る時間そのものには価値がありません。価値があるのは、自分で書いた行が動いた瞬間です。
数え方は2通りあります。3つのキーを最初から0で用意しておく道と、出てきたキーをその都度足す道です。今回は0人のランクも残す約束なので、前者のほうが素直に収まります。
後者で書いてみたい場合は、キーが無いときにどうなるかを確かめてから進めてください。get の第2引数が効いてきます。
要件
- get_rank(points) を定義し、count_by_rank の中から呼び出すこと
- count_by_rank(members) は members に並んだポイントを1件ずつランクへ直して数えること
- 返す辞書はゴールド・シルバー・ブロンズの3つのキーを必ず持つこと
- 該当者がいないランクは値を 0 にすること
入出力例
count_by_rank([1200,300,800,1000,499,500,2400]) → {"ゴールド":3,"シルバー":2,"ブロンズ":2}
count_by_rank([100,200,0]) → {"ゴールド":0,"シルバー":0,"ブロンズ":3}
count_by_rank([]) → {"ゴールド":0,"シルバー":0,"ブロンズ":0}ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです
ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
編集 ゆめさく編集部