演習として、同じ数字の 5 つのサイコロを振る確率を計算するプログラムを書いています。アイデアは、単純な数学とは対照的に、シミュレーションを介して結果を取得することです。私のプログラムはこれです:
# rollFive.py
from random import *
def main():
n = input("Please enter the number of sims to run: ")
hits = simNRolls(n)
hits = float(hits)
n = float(n)
prob = hits/n
print "The odds of rolling 5 of the same number are", prob
def simNRolls(n):
hits = 0
for i in range(n):
hits = hits + diceRoll()
return hits
def diceRoll():
firstDie = randrange(1,7,1)
for i in range(4):
nextDie = randrange(1,7,1)
if nextDie!=firstDie:
success = 0
break
else:
success = 1
return success
問題は、n の値を 1 000 000 にしてこのプログラムを実行すると、通常は 0.0006 から 0.0008 の間の確率が得られることですが、私の数学では、0.0001286 (別名 (1/6)^5) に近い答えが得られるはずだと思い込んでしまいます。 .
プログラムに何か問題がありますか? それとも、ここで数学で基本的な間違いを犯していますか? それとも、プログラムをより多くの反復で実行できた場合、結果がより正しい答えに近づくことがわかりますか?