“三门问题”的理解和Python验证

“三门问题”的理解和Python验证三门问题 MontyHallpro 亦称为蒙提霍尔问题 蒙特霍问题或蒙提霍尔悖论 大致出自美国的电视游戏节目 Let sMakeaDeal 问题名字来自该节目的主持人蒙提 霍尔 MontyHall 参赛者会看见三扇关闭了的门 其中一扇的后面有一辆汽车 选中后面有车的那扇门可赢得该汽车 另外两扇门后面则各藏有一只山羊 当参赛者选定了一扇门 但未去开启它的时候 节目主持人

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。

当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊(主持人肯定会开一扇有羊的门)。主持人其后会问参赛者要不要换另一扇仍然关上的门。

问题是:换另一扇门会否增加参赛者赢得汽车的机率?

1.直观理解

这时主持人会在后两扇门中打开一扇有山羊的门,也就是后面的2/3中又有一扇门被确定了

这里写图片描述

那么此时的2/3的概率会收缩到最后一扇门上,所以在后一扇门上的出现汽车的概率(2/3)会大于第一扇门。

所以换门会提高获得汽车概率

我们不妨把3个门的情况推广到100个门的情况,这时候理解起来会更直观。

此时还是应该换门。

2.列举

我们列举获得汽车的情况

第一种情况:汽车就在你一开始选的门后

此时不换门,汽车就是你的!!!

这里写图片描述

第二种情况:汽车在第二扇门后

主持人会帮你开第三扇门(他总是会给你开有羊的门)

此时你换门,汽车才是你的

这里写图片描述.

第三种情况:汽车在第三扇门后

主持人会帮你开第二扇门

综上,换门获得汽车的概率为2/3,而不换门得到汽车的概率是1/3。

3.用python来验证

首先是不换门的方法stay()

def stay(): doors = ['car','goat','goat'] #设置三扇门,其中两扇门后面是山羊,一扇门后是汽车 choose = choice(doors) #随机选择一扇门 if choose == 'car': #不换门则直接判断 return 'win' else: return 'lose'

也就是不换门就会选到汽车的情况。

然后是换门的方法switch():

def switch(): doors = ['car', 'goat', 'goat'] choose = choice(doors) doors.remove(choose) #选择的门放一边 doors.remove('goat') #剩下的门,去掉一只山羊 if doors == ['car']: #换门 return 'win' else: return 'lose' 

换门后会选到汽车的情况。

完整代码

from random import choice def stay(): doors = ['car','goat','goat'] #设置三扇门,其中两扇门后面是山羊,一扇门后是汽车 choose = choice(doors) #随机选择一扇门 if choose == 'car': #不换门则直接判断 return 'win' else: return 'lose' def switch(): doors = ['car', 'goat', 'goat'] choose = choice(doors) doors.remove(choose) #选择的门放一边 doors.remove('goat') #剩下的门,去掉一只山羊 if doors == ['car']: #换门 return 'win' else: return 'lose' if __name__ == '__main__': total =  count_switch = 0 win_switch = 0 count_stay = 0 win_stay = 0 for i in range(total): choose = choice([1,2]) #随机选择换门还是不换门 if choose == 1: count_switch += 1 if switch() == 'win': win_switch += 1 else: count_stay += 1 if stay() == 'win': win_stay += 1 print('换门次数:',count_switch) print('换门后得到汽车:',win_switch,'%.2f%%'%(100*win_switch/count_switch)) print('不换门:',count_stay) print('不换门后得到汽车:',win_stay,'%.2f%%'%(100*win_stay/count_stay)) 

运行情况:
这里写图片描述

由此也可以验证我们上面说的换门后获得汽车的概率为2/3的说法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230291.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VMware Ubuntu安装详细过程(非常靠谱)

    不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少大公司都要求熟悉在linux上开发,因此从个人职业发展有必要去多了解一下linux。

    2022年4月6日
    79
  • SQL SERVER的QUOTENAME函数

    SQL SERVER的QUOTENAME函数quotename使函数中的输入成为一个有效的标识符selectQUOTENAME(‘dddd’) 返回[dddd]selectQUOTENAME(‘dddd’,'”‘)返回”dddd”首先,sqlserver里的标识符有一定的规则,比如 你 createtableabc123(…) 那么中间含有空格,它不是符合规则的。 

    2022年7月25日
    17
  • Java中的cas(this关键字java)

    在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制

    2022年4月14日
    103
  • “多源异构”和“异构同源”定义区分详解「建议收藏」

    “多源异构”和“异构同源”定义区分详解一、多源异构1、定义2、示例解释二、异构同源1、定义2、示例解释三、综合举个简单栗子:叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

    2022年4月18日
    97
  • 亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码

    亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码源码简介东西没问题,和别人换的本来说是多语言带机器人翻译之类的,给了个这。。。直接一键安装的,启动两个端口就行了,安装倒是简单编号:ym270品牌:无语言:PHP大小:34.5MB类型:在线客服系统支持:pc+wap亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码,直接一键安装的,启动两个端口就行了。安装教程:PHP5.6+MySQL5.5+设置网站运行目录为public,配置伪静态规则为thinkphp访问/install.php安装即可亲测无限坐席

    2022年7月19日
    19
  • ESP32开发之旅——RC522模块的使用

    ESP32开发之旅——RC522模块的使用ESP32开发之旅——RC522模块的使用前言在本文中,您将学会如何使用ESP32连接RFID模块RC522,本文提供了简单的示例供学习参考。需要注意的是,本文中的ESP32是使用MicroPython进行开发的,(同时ESP8266也可按照本文进行开发)。本文中出现的代码是从GitHub开源库中搬运而来,GitHub链接已放在文尾。RFID-RC522模块的简单介绍​ 射频识别RFID(RadioFrequencyIdentification)是一种无线数据传输系统,用于在标签和读取

    2022年7月14日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号