在有偏见的模具上找到概率

时间:2019-05-05 09:01:31

标签: python probability probability-theory

我必须模拟一个有偏向的骰子,以使6次发生的次数超过50%。我能够使用的方法:

from random import randint,choice
def bdie():
    out = random.randint(0,2)
    if (out==1 or out == 2):
        return 6
    else:
        r = choice([i for i in range(1,7) if i not in [6]])
        return r

def bdthrow(n):
    output = []
    for i in range(0,n):
        if n>0 & n<=100000000:
            outcome = bdie()
            output.append(outcome)
        else:
            print("Invalid")
    print(output)

其输出将为:

  

[6,6,6,6,6,3,6,3,5,4]

现在在这个偏斜的骰子上,我应该找到顶面为5的概率,并且我需要找到该骰子每个面的平均计数。

现在可以很容易地在纸上求解总和,在这里我可以找到概率,但是我不确定如何在python中实现。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我正确理解,您正在寻找获得5的无偏估计量。这样的估计数可以是掷骰子足够次时获得5的数目。即# fives / n

从内存角度来看,我建议使用defaultdict。同样,也不需要每次检查n的值。

from random import randint,choice
from collections import defaultdict

def bdie():
    out = randint(0,2)
    if (out==1 or out == 2):
        return 6
    else:
        r = choice([i for i in range(1,7) if i not in [6]])
        return r

def bdthrow(n):
    output = defaultdict(int)
    for i in range(0,n):
        outcome = bdie()
        output[outcome] +=1
    return (float(output[5])/n)

对代码的其他优化很少,但天真可行。