我正在研究计算机编程课程的MIT OpenCourseWare入门课程,但不确定是否要以正确的方式解决简单的仿真问题。
掷Yahtzee的机率是多少!在第一卷?也就是说,什么是
掷出5个6面骰子并全部显示相同数字的概率?
编写蒙特卡洛模拟以解决上述问题(Yahtzee问题),然后
提交您的代码为
因此,滚动Yahtzee的概率为1/1296或大约.077%
这是我运行模拟的代码:
import random
def runYahtzee(numTrials):
"""Runs the classes version of the yahtzee simulation"""
success = 0
for i in range(numTrials):
dices = []
for i in range(6):
dices.append(random.randrange(1,7))
#print dices
state = True
for dice in dices:
if dice != dices[0]:
state = False
if state == True:
print "You got a Yahtzee"
print dices
success += 1
print "numTrials is: " + str(numTrials)
print "Success is: " + str(success)
rate = float(success)/numTrials
return rate
runYahtzee(10000000)
多次运行该程序,每次都达到.0001258。这是0.012%,但是实际几率约为.077%。我在这里做错什么了吗?
最佳答案
您做错了的是掷6个骰子而不是5个。
0.001258 * 6 = 0.0007548
...接近您的0.077%
更改循环:
for i in range(5):
顺便说一句,复数是
dice
;单数是die
。 dices
是错误的,除非您要尝试娱乐。在这种情况下,您可以使用单数的“ douse” ...永远不要说死!