我必须模拟一个有偏向的骰子,以使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中实现。
谢谢。
答案 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)
对代码的其他优化很少,但天真可行。