概率运动返回预期的不同结果

时间:2009-09-24 01:46:46

标签: python probability

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

我的程序有问题吗?或者我在这里用数学做出一些基本错误?或者如果我能够在更大的迭代次数上运行程序,我会发现我的结果更接近正确的答案吗?

4 个答案:

答案 0 :(得分:6)

获得特定数字五次的概率是(1/6)^ 5,但获得任意五个数字相同的概率是(1/6)^ 4。

有两种方法可以看到这一点。

首先,获得所有1的概率,例如,是(1/6)^ 5,因为只有一个方法可以得到1个。乘以5个骰子,你得到(1/6) )^ 5。但是,由于有六种可能的数字可以相同,因此有六种方法可以成功,即6((1/6)^ 5)或(1/6)^ 4。

从另一个角度来看,第一卷给出的内容并不重要,因此我们将其排除。然后我们必须将该数字与剩余的四个卷匹配,其概率为(1/6)^ 4。

答案 1 :(得分:1)

你的数学错了。获得具有相同数字的五个骰子的概率为6*(1/6)^5 = 0.0007716

答案 2 :(得分:1)

很简单,滚动5个骰子可能有6 ** 5个结果,其中只有6个成功,所以答案是6.0 / 6 ** 5

答案 3 :(得分:0)

我认为您的预期概率是错误的,因为您已经说明了问题。 (1/6)^ 5是连续5次滚动一些特定数的概率; (1/6)^ 4是连续5次滚动任何数字的概率(因为第一次滚动总是“成功” - 也就是说,第一次滚动总会产生一些数字)。

>>> (1.0/6.0)**4
0.00077160493827160479

与使用100万次迭代运行程序相比:

[me@host:~] python roll5.py 
Please enter the number of sims to run: 1000000
The odds of rolling 5 of the same number are 0.000755