三门问题 python代码实现

三门问题又被称为蒙提霍尔问题,出自美国的一个电视游戏节目。

逻辑很简单,但结果就是不太能让人接受,现在详细讲一下这个问题。

题目非常简单:参赛者面前有三扇门,其中一扇门后面有一辆小汽车,另外两扇门后面都是山羊,如果参赛者选中有汽车的那扇门,就可以把汽车开回家。

当参赛者选择了其中一扇门后,此时主持人打开剩余两扇门其中的一扇,里面是一只山羊,那么现在主持人给参赛者一次重新选择的机会,参赛者应不应该换门去选择另外一扇门?

有人认为:

小汽车在剩余两个门内的概率必然都是 50%,那么换不换门其实意义不大,因为概率都一样。

但是答案却是:

如果参赛者坚持原来的选择,那么选中小汽车的概率为 1/3,如果换门的话,选中小汽车的概率为 2/3。

应该大部分都会这么认为,毕竟只剩下两个了,你为什么说不是一半一半的概率呢?

其实这是个数学问题,不能用直觉来判断。接下来从一下角度来说下原因。

从数学的角度,画个图来看下

这样能理解了吗?

如果不换门,选中的概率为 1/3 * 1/2 + 1/3 * 1/2 + 0 + 0 = 1/3

如果换门,选中的概率为 0 + 0 + 1/3 * 1+ 1/3 * 1 = 2/3

再换一个角度,从代入法来看这个问题:

首先,三个门选手选择一个,中车概率是三分之一,其他两个门加起来就是三分之二。这时候,主持人在另外两个门里选择了一个错误答案。那是不是可以理解,这两扇门中奖的概率还是三分之二,但是全都转嫁到剩下的门上了呢?毕竟概率一开始就是定下来的,不会随着门的消失而消失。

再或者,我们自己取大量的数据进行实现,看看结果:

import random

# 模拟测试的次数
simulationCount = 1000000
# 第一次选中小汽车的次数
firstSelectedSuccessSum = 0
# 第二次重新选择选中小汽车的次数
secondSelectedSuccessSum = 0
for num in range(simulationCount):
    # 初始化所有门
    doors = list(range(1,4))
    # 随机生成小汽车的门位置
    carDoor = random.randint(1,3)
    # 参赛者随机选中一个
    firstSelectedDoor = random.randint(1,3)
    # 主持人在剩下的两个里面随机选择一个
    doors.remove(firstSelectedDoor)
    presenterSelectedDoor = doors[random.randint(0,1)]
    # 主持人选择后剩下的一个门,也就是选手第二次选择的门
    doors.remove(presenterSelectedDoor)
    secondSelectedDoor = doors[0]
    # 因为主持人不能选择有小汽车的门
    # 所以如果上面主持人随机选择的是有小汽车的门,则应该重新选择另一个门
    if carDoor == presenterSelectedDoor:
        secondSelectedDoor = presenterSelectedDoor
    # 如果第一次选中有小汽车的门,累计计数
    if carDoor == firstSelectedDoor:
        firstSelectedSuccessSum = firstSelectedSuccessSum + 1
    # 如果第二次重新选择选中有小汽车的门,累计计数
    elif carDoor == secondSelectedDoor:
        secondSelectedSuccessSum = secondSelectedSuccessSum + 1
# 输出测试结果
print ('模拟测试 %s 次'%simulationCount)
print ('不换门选中的次数为 {} 次,概率为:{:.2%}'.format(firstSelectedSuccessSum, firstSelectedSuccessSum/simulationCount))
print ('换门后选中的次数为 {} 次,概率为:{:.2%}'.format(secondSelectedSuccessSum, secondSelectedSuccessSum/simulationCount))

结果显而易见,和上述分析的结果一样,坚持最初的选择,选中小汽车概率 1/3,换门后选中小汽车概率 2/3。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狐狸戾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值