python_三门问题:蒙提霍尔问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89430544

三门问题(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

猜你喜欢

转载自blog.csdn.net/u012429555/article/details/89430544