作为一个练习,我正在编写一个程序来计算用相同的数字掷出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值为1000000时,我得到的概率通常在0.0006到0.0008之间,而我的数学计算让我相信我得到的答案应该接近于0.0001286(即(1/6)^5)。在
我的程序有问题吗?我在数学上犯了什么错误?或者,如果我能够在更大的迭代中运行程序,我会发现我的结果更接近正确的答案吗?在
很简单,掷5个骰子有
6 ** 5
个可能的结果,而这些结果中只有6个是成功的,所以答案是6.0 / 6 ** 5
你的数学错了。得到五个相同数字的骰子的概率是
6*(1/6)^5 = 0.0007716
。在一个特定数的概率是(1/6)^5,但任何五个数相同的概率是(1/6)^4。在
有两种方法可以看到这一点。在
首先,例如,得到所有1的概率是(1/6)^5,因为只有一种方法可以得到1。乘以五个骰子,你得到(1/6)^5。但是,既然有六个可能的数字可以得到相同的结果,那么就有六种方法可以成功,即6((1/6)^5)或(1/6)^4。在
从另一个角度看,第一次掷骰结果如何并不重要,所以我们排除了它。然后我们要把这个数字和剩下的四个骰子匹配,其概率是(1/6)^4。在
相关问题 更多 >
编程相关推荐