演習7: doctest, while文の利用とこれまでの復習(簡易ガチャ・シミュレータ)


ペアのdriver担当

達成目標


演習7: 簡易ガチャ・シミュレータを実装してみよう。

演習7.1: くじ引き関数 draw_lot() を作成せよ。

# draw_lot()の実行例
# (以下はインタプリタの例だが、実行結果を確認できるならスクリプトファイルでもOK)
>>> draw_lot()
25
>>> draw_lot()
9

演習7.2: draw_lot() の動作が想定通りであることを確認するユニットテストを書け。

演習7.3: あなたは目的のクジを引けるまで永遠と draw_lot() を実行する必要がある。言い換えると、目的クジが出るまでは終わることができない。while文を用いて、目的のクジを引くまでにかかった回数をカウントするコードと、実行結果を示せ。

演習7.4: 演習7.3で書いたコードは「目的のクジが一度出るまでに要した回数」をカウントしてくれるはずだ。これを関数 number_of_drawing() として定義せよ。

# number_of_drawing()の実行例
>>> number_of_drawing(1)
57
>>> number_of_drawing(1)
17

演習7.5: number_of_drawing()を利用し、「平均的に何回くじを引けば当たりそうか」を検証(出力)するシミュレータ(プログラム)を作成せよ。

演習7.6: number_of_drawing()を利用し、1000回実行中で「最も運が悪かった回数(最大回数)」と「最も運が良かった回数(最小回数)」を求めるシミュレータ(プログラム)を作成せよ。

演習7.7: 演習7.5, 7.6で書いたコードを「week7.py」というファイル名で保存し、シェル上でスクリプトを実行せよ。

# 実行結果の例
oct:tnal% python3 week7.py
最小回数は1回でした!
平均回数は97.561回でした!
最大回数は670回でした!
oct:tnal% python3 week7.py
最小回数は1回でした!
平均回数は99.188回でした!
最大回数は809回でした!

演習7.8: 演習7.7の実行結果を元に、このクジの特徴について考察せよ。

(余裕のあるペア向け) 演習7.x: 演習7.7までは「等確率で出てくるくじびき」を想定したコードになっている。世の中には確率が異なるくじ引きが多々あるが、どのように実装したら良いだろうか?