羊车门问题
题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。
1、按照你的第一感觉回答,你觉得不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?
答:几率没有发生变化。
2、请自己认真分析一下“不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?” 写出你分析的思路和结果。
答:换选择能有更高的几率获得汽车。
第一次选择概率 |
是否更换 |
得到的物品 |
更换概率 |
结果概率 |
2/3羊 |
换 |
汽车 |
1/2 |
1/3 |
不换 |
羊 |
1/3 |
||
1/3汽车 |
换 |
羊 |
1/6 |
|
不换 |
汽车 |
1/6 |
换获得汽车:(1/3)/(1/3+1/6)=2/3
不换获得汽车:(1/6)/(1/3+1/6)=1/3
分析:产生错误的原因是,只是考虑第二次选择获得汽车的概率,而没有考虑第一次选择为汽车和山羊的概率不同,这是典型的条件概率问题
3、请设法编写程序验证自己的想法,验证的结果支持了你的分析结果,还是没有支持你的分析结果,请写出程序运行结果,以及其是否支持你的分析。(提示:可以借助随机数函数完成此程序)
答:采用随机数的方法,让参赛者选择几号门,是否更换选择。则就可以知道是否获得车。用循环的方法进行多次实验,然后输出更换选择成功的概率 和 不更换选择成功的概率。
4、请附上你的代码。(提示:使用编辑器中的插入代码功能,将代码显示为 Python 风格)
import random def sheep(): #假设有三扇门,(1,2,3)。1门后是车,2,3门后是山羊 a = random.randint(1,3) #第一次选择 choose=random.randint(0,1) #参赛者的选择,0表示不重新选择,1表示重新选择 if choose==1: #如果参赛者重新选择的话,只有她第一次选择的不是一号门,才可以获得车 if a!=1: return '11' #重新选择,得到车返回11 else: return '10' #重新选择,不能得到车返回10 else: #如果参赛者不重新选择的话,只有她第一次选择的是一号门,才可以获得车 if a==1: return '01' #不重新选择,得到车返回01 else: return '00' #不重新选择,不能得到车返回00 max=5000 #进行实验的次数 num1,num2,num3,num4=0,0,0,0 for i in range(max): value=sheep() if value=='11': #如果函数返回11,则是重新选择,得到车 num1=num1+1 elif value=='01': #如果函数返回01,则是不重新选择,得到车 num2=num2+1 elif value=='10': #如果函数返回10,则是重新选择,没有得到车 num3=num3+1 else: #如果函数返回00,则是不重新选择,得到车 num4=num4+1 P1=num1/(num1+num3) #重新选择得到车的概率 print('重新选择得到车的概率:{:5f}'.format(P1)) P2=num2/(num2+num4) #不重新选择得到车的概率 print('不重新选择得到车的概率:{:.5f}'.format(P2))