三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,
大致出自美国的电视游戏节目Let's Make a Deal。
问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,
其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。
当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。
主持人其后会问参赛者要不要换另一扇仍然关上的门。
问题是:换另一扇门会否增加参赛者赢得汽车的机率?
如果严格按照上述的条件,即主持人清楚地知道,自己打开的那扇门后是羊,那么答案是会。
不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
import random
def MontyHadll(Dselect,Dchange):
Dcar=random.randint(1,3)
if Dcar==Dselect and Dchange==0: #一开始选中但是改变改变了选择
return 1
elif Dcar!=Dselect and Dchange==0: #一开始没选中但是没改变选择
return 0
elif Dcar==Dselect and Dchange==1:# 一开始选择但是改变选择
return 0
else:
return 1 #一开始没选中但是改变选择
测试一千次看看概率:
#不确定是否改变选择
n=1000;
win=0;
for i in range(n):
Dselect=random.randint(1,3)
Dchange=random.randint(0,1)
win=win+MontyHadll(Dselect,Dchange)
print(float(win)/float(n))
#确定不改变选择
n=1000;
win=0;
for i in range(n):
Dselect=random.randint(1,3)
Dchange=0
win=win+MontyHadll(Dselect,Dchange)
print(float(win)/float(n))
#确定改变选择
n=1000;
win=0;
for i in range(n):
Dselect=random.randint(1,3)
Dchange=1
win=win+MontyHadll(Dselect,Dchange)
print(float(win)/float(n))
还是换吧 ,概率大一些,大哥们你们觉得了?
0.483 | 0.492 | 0.533 |
0.325 | 0.31 | 0.347 |
0.681 | 0.669 | 0.651 |