###前提・実現したいこと
「Pythonから始める数学入門」という本の内容について質問させてください。
この本の第5章「数学と確率を操作する」の5.2.3.3 「目標点数は可能か」というサンプルコードが掲載されています。
このソースコードはサイコロを振る最大試行回数と、目標値を入力し、
出た目の和が目標値に達する確率をシミュレーションするプログラムです。
このソースコードでは、
[サイコロの目の集合] * [最大試行回数]の直積で標本空間を定義しているのですが、
この標本空間では、例えば
目標値 : 10
最大試行回数 : 5 とした場合に、
5回目以前の2回目や3回目で目標値に達した場合のような試行を網羅できていないように思われます。
本の記述としては、"最大"とあるのでそれまでの試行回数を網羅しているはずですが、該当ソースコードのどの部分でそれが実現しているのかがわからず、もやもやしています。
ぜひとも有識者の方、ご回答並びに解説いただけないでしょうか。
よろしくお願いいたします。
###該当のソースコード
python3
1## 目標とする点数が決められた振れる回数内で可能かどうかを示す 2from sympy import FiniteSet 3import random 4 5def find_prob(target_score, max_rolls): 6 die_sides = FiniteSet(1,2,3,4,5,6) 7 # 標本空間 8 s = die_sides ** max_rolls 9 # 事象 10 if max_rolls > 1: 11 success_rolls = [] 12 for elem in s: 13 if sum(elem) >= target_score: 14 success_rolls.append(elem) 15 else: 16 if target_score > 6: 17 success_rolls = [] 18 else: 19 success_rolls = [] 20 for roll in die_sides: 21 if roll >= target_score: 22 success_rolls.append(roll) 23 e = FiniteSet(*success_rolls) 24 # 目標点数に達する確率の計算 25 return len(e)/len(s) 26 27if __name__ == '__main__': 28 target_score = int(input('Enter the target score : ')) 29 max_rolls = int(input('Enter the maimum number of rolls allowed : ')) 30 p = find_prob(target_score, max_rolls) 31 print('Probability : {0:5f}'.format(p))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。