首页 > 解决方案 > 在有偏的骰子上寻找概率

问题描述

我必须模拟一个有偏差的模具,这样 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 中实现它。

标签: pythonprobabilityprobability-theory

解决方案


如果我理解正确,您正在寻找获得 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)

代码几乎没有其他优化,但天真地应该可以工作。


推荐阅读