题目描述:有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、请附上你的代码。
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))