原题是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
问题是:换另一扇门会否增加参赛者赢得汽车的机会率?
#羊车门问题求解
#羊车门问题求解
import random as rd
k=100#选择次数
i=0
m=0
for x in range(k):
num = [1,1,0]
rd.shuffle(num)#随机化门
print("关闭前:"+str(num))
human = rd.randint(0,2)#选择一个门
print("随机选择第"+str(human+1)+"个门")
#关闭一个羊门,赋值为9
y=0
while y <3:
if y !=human and num[y] == 1:
num[y]=9
j=y
y=3
else:
y+=1
print("关闭一个门:"+str(num))
#坚持选择
if num[human] == 0:#中奖
i+=1
print("坚持选择中奖!")
else:
print("坚持选择未中奖!")
#更换选择
z=0
while z <3:
if z != human and z != j:
print("重新第"+str(z+1)+"个门")
if num[z]==0:
m+=1
print("重新选择中奖!")
else:
print("重新选择未中奖!")
z=3
else:
z+=1
print("\n")
rate_1=i/k
rate_2=m/k
print("坚持选择的中奖概率="+str(rate_1))
print("重新选择的中奖概率="+str(rate_2))
运行结果如下:
第一次运行结果:
关闭前:[1, 1, 0]
随机选择第2个门
关闭一个门:[9, 1, 0]
坚持选择未中奖!
重新第3个门
重新选择中奖!
关闭前:[1, 0, 1]
随机选择第2个门
关闭一个门:[9, 0, 1]
坚持选择中奖!
重新第3个门
重新选择未中奖!
。。。。。。
关闭前:[1, 0, 1]
随机选择第1个门
关闭一个门:[1, 0, 9]
坚持选择未中奖!
重新第2个门
重新选择中奖!
关闭前:[1, 1, 0]
随机选择第1个门
关闭一个门:[1, 9, 0]
坚持选择未中奖!
重新第3个门
重新选择中奖!
关闭前:[1, 0, 1]
随机选择第2个门
关闭一个门:[9, 0, 1]
坚持选择中奖!
重新第3个门
重新选择未中奖!
第一次运行结果:
坚持选择的中奖概率=0.4
重新选择的中奖概率=0.6
第二次运行结果:
第三次运行结果:
去除输出函数后源代码:
总结:答案是重新选择概率是2/3.
第二次运行结果:
坚持选择的中奖概率=0.35
重新选择的中奖概率=0.65
第三次运行结果:
坚持选择的中奖概率=0.41
重新选择的中奖概率=0.59
。。。
去除输出函数后源代码:
#羊车门问题求解
import random as rd
from time import clock
k=1000000#选择次数
i=0
m=0
clock()
for x in range(k):
num = [1,1,0]
rd.shuffle(num)#随机化门
human = rd.randint(0,2)#选择一个门
#关闭一个羊门,赋值为9
y=0
while y <3:
if y !=human and num[y] == 1:
num[y]=9
j=y
y=3
else:
y+=1
#坚持选择
if num[human] == 0:#中奖
i+=1
#更换选择
z=0
while z <3:
if z != human and z != j:
if num[z]==0:
m+=1
z=3
else:
z+=1
rate_1=i/k
rate_2=m/k
print("运行时间是:{:5.5}s".format(clock()))
print("坚持选择的中奖概率="+str(rate_1))
print("重新选择的中奖概率="+str(rate_2))
运行结果:
运行时间是:6.2272s
运行时间是:6.2272s
坚持选择的中奖概率=0.333442
重新选择的中奖概率=0.666558
总结:答案是重新选择概率是2/3.