概率练习返回预期的不同结果

2024-04-25 21:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个练习,我正在编写一个程序来计算用相同的数字掷出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)。在

我的程序有问题吗?我在数学上犯了什么错误?或者,如果我能够在更大的迭代中运行程序,我会发现我的结果更接近正确的答案吗?在


Tags: ofthein程序numberfordefrange
3条回答

很简单,掷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。在

相关问题 更多 >