最近,在网上看到一个有趣的三门问题,遂准备用python来娱乐下。下边是三门问题的介绍。

  三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

  参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。


问题是:换另一扇门会否增加参赛者赢得汽车的机率?


要求:

通过程序模拟三门问题,并重复进行大量测试,统计换门与不换门的情况下,赢得汽车的概率。


下边是解答的代码:

#!/usr/bin/python
#coding:utf-8
total=100000
a=b=c=d=e=f=0.00
x=0
from random import randint
list=["sheep1","sheep2","car"]
tuple=("yes","no")
while x!=total:
   t=randint(0,2)
   i=randint(0,1)
#   print list[t],tuple[i] 
   if list[t]=="car":
        if tuple[i]=="yes":
         a+=1
        else:
         b+=1
   elif list[t]=="sheep1":
if tuple[i]=="yes":
           c+=1
        else:
           d+=1
   elif list[t]=="sheep2":
        if tuple[i]=="yes":
           e+=1
        else:
           f+=1
   x+=1
print "总次数为%d"%(total)
print "换%d" %(a+c+e),"不换%d" %(b+d+f)
print "不换赢的概率为%.2f%%"%(b/(c+b+e)*100)
print "换赢的概率为%.2f%%"%((c+e)/(c+b+e)*100)

下图运行结果:

三门问题之python解答_三门问题

结论: 由此可以看出,换门赢的概率大约是不换赢的概率的2倍,所以换门能增加参赛者赢得汽车的概率。