首页 > 解决方案 > Python - 骰子和硬币游戏

问题描述

提到这个问题

“假设我掷出一个 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 或贝叶斯定理的理解很差吗?

标签: pythonrandommontecarlo

解决方案


您的代码实际上是在回答“鉴于骰子得分为 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)

推荐阅读