Python-骰子和硬币游戏

时间:2019-04-19 01:01:33

标签: python random montecarlo

指的是this question

“假设我掷出一个4面骰子,然后掷出与掷骰子相对应的公平硬币多次。考虑到我在硬币掷骰子上获得三个正面,该骰子得分为4的概率是多少? “

在答案中解释为结果应为2/3。

我用Python 3编写了以下代码:

import random

die=4
heads=3

die_max=4

tot=0
tot_die=0
for i in range(0,100000) :
    die_val=random.randint(1,die_max)
    heads_val=0
    for j in range(0,die_val) :
        heads_val+=random.randint(0,1)
    if die_val==die :
        tot_die+=1
    if heads_val==heads and die_val==die :
        tot+=1
print(tot/tot_die)

我希望它能输出约0.66的东西,但实际上它的计算结果约为0.25。

我不太了解Python或贝叶斯定理吗?

1 个答案:

答案 0 :(得分:1)

您的代码实际上是在回答“假设骰子得分为4,您在掷硬币时获得三个正面的概率是多少?”要使其回答预期的问题,请更改倒数第二条if语句的条件:

import random

die=4
heads=3

die_max=4

tot=0
tot_heads=0
for i in range(0,100000) :
    die_val=random.randint(1,die_max)
    heads_val=0
    for j in range(0,die_val) :
        heads_val+=random.randint(0,1)
    if heads_val==heads : # the important change
        tot_heads+=1
    if heads_val==heads and die_val==die :
        tot+=1
print(tot/tot_heads)