最近,在网上看到一个有趣的三门问题,遂准备用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)
下图运行结果:
结论: 由此可以看出,换门赢的概率大约是不换赢的概率的2倍,所以换门能增加参赛者赢得汽车的概率。