我正在研究计算机编程课程的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;单数是diedices是错误的,除非您要尝试娱乐。在这种情况下,您可以使用单数的“ douse” ...永远不要说死!

10-07 19:24