概率和rpg骰子在高值时出错

xmq68pz9  于 2022-10-22  发布在  Python
关注(0)|答案(1)|浏览(170)

我做了这个简短的代码来计算掷骰子成功的几率,它运行得很好……但数量不多。Se代码,我将在下面更好地解释。

def calc_dados(f_sucessos = 1, faces = 6, n_dados = 1):

  p_max = ((f_sucessos/faces)**n_dados) #chance de todos

  fator = 1
  p_meio = 0

  for i in range(n_dados-1):
    p_meio += (((f_sucessos/faces)**(n_dados-fator) * ((faces-f_sucessos)/faces)**(n_dados-(n_dados-fator))) * n_dados)
    fator += 1

  p = p_max + p_meio
  return p*100

所以,好吧,它起作用了,为什么不看看我在增加骰子的功能上的机会有多大?骰子越多,机会越大。所以我用Pandas做了一张小table:

f_sucessos = 1    # how many faces are success
faces = 2         # faces of the dice
n_dados = 10      # n de dados lançados

suc_list = []
for i in range(0,n_dados): suc_list.append(f_sucessos)
fac_list = []
for i in range(0,n_dados): fac_list.append(faces)
cha_list = []
for i in range(0,n_dados): cha_list.append(calc_dados(f_sucessos, faces, i+1))

df = pd.DataFrame(
{
"n_dados" : range(1,n_dados+1),
"faces" : fac_list,
"sucessos" : suc_list,
"chance" : cha_list
 }
)
df

结果很奇怪……所以我写了一张硬币概率表,并测试了硬币是双面骰子。右表为:table of right brute force tested results
但如果您使用我的代码创建此表,结果将是:table of the results of my code
拜托,任何人都能帮助我理解为什么在某个时刻,概率会下降,而它们应该更高?例如:4个硬币中至少有1个“头”的概率应该是93.75%,但我的代码显示是81.25%。。。

rta7y2nd

rta7y2nd1#

老实说,我不知道“calc_dados”如何准确地计算骰子成功的概率。因此,我实施了一种可能更幼稚的方法:
1.首先,我们计算可能结果的总数:outcomes_total=faces**n_dados
1.其次,我们计算成功的结果:outcomes_success
1.最后:p=outcomes_success/outcomes_total
稍后,我将在我的函数版本后面添加一个数学证明:)

from math import comb

def calc_dados(f_sucessos=1, faces=6, n_dados=1):

    assert f_sucessos <= faces

    outcomes_total = faces**n_dados

    outcomes_success = 0

    f_fail = faces - f_sucessos

    for i in range(1, n_dados + 1):

        one_permutation = (f_sucessos**i) * (f_fail**(n_dados - i))
        n_permutations = comb(n_dados, i)

        outcomes_success += one_permutation * n_permutations

    p = outcomes_success / outcomes_total

    return p * 100

这些是一些测试结果


小时


小时


小时


小时

相关问题