题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。
1、按照你的第一感觉回答,你觉得不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?
答:没变化。因为打开了一扇羊的门,剩下两个门概率都是1/2。
2、请自己认真分析一下“不换选择能有更高的几率获得汽车,还是换选择能有更高的几率获得汽车?或几率没有发生变化?” 写出你分析的思路和结果。
答:换选择获得汽车概率更高。一开始选中汽车的概率为1/3,打开一扇羊的门后,换选择成功(第一次选为羊)的概率变为2/3 * 1 = 2/3 ;不换(第一次选为车)而成功的概率为 1/3 。
3、请设法编写程序验证自己的想法,验证的结果支持了你的分析结果,还是没有支持你的分析结果,请写出程序运行结果,以及其是否支持你的分析。(提示:可以借助随机数函数完成此程序)。
答:
1..输入模拟次数time。
2.times = 0,当times <= time 时,执行第3步,否则,执行第9步。
3.设0代表羊,1代表车。
4.定义一个列表,元素为0,0,1,并且随机排序。
5.随机抽出一个元素来(设为a),再从列表中删除一个0。
6.如果换选择的话,则再从列表中删去a,取出最后一个元素(设为b);不换选择的话,最终选择为a。
7.若a是1,则i++;若b是1,则j++。
8.times++,返回第2步。
9.计算各个概率,并输出。
结果:不换而成功的概率为:0.334;换选择而成功的概率为:0.666。支持。
4、请附上你的代码。(提示:使用编辑器中的插入代码功能,将代码显示为 Python 风格)
代码如下:
1 import random
2
3 i,j,times = 0,0,0
4 time = eval(input("请输入总模拟次数:"))
5
6 while times < time:
7 ls = [0,0,1]
8 random.shuffle(ls)
9 # print(ls) 测试是否打乱排序
10 a = ls[random.randint(0,2)]
11 # print("a =",a)
12 ls.remove(0)
13 ls.remove(a)
14 b = ls[0]
15 # print("b =",b)
16 if a == 1:
17 i = i + 1
18 if b == 1:
19 j = j + 1
20 times = times + 1
21 print("不换而成功的概率为:{:.5f}".format(i/times))
22 print("换选择而成功的概率为:{:.5f}".format(j/times))