三门问题(Monty Hall problem)蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。
from random import randint
i = 0 #用于计数模拟的次数
count = 0
count1 = 0
while True:
bList = [1,2,3]#代表3扇门
i += 1
a=randint(1,3) #随机生成数字的字门后面代表汽车
b=randint(1,3) #参赛选手随机猜测的答案
if a == b:
count1 += 1#模拟直接中奖的次数
for x in range(3):
if bList[x] != a and bList[x] != b:#打开一扇不是汽车也不是参赛选手选择的门。
bList.remove(bList[x])
break
for x in range(2):#在剩余的两扇门后面,统计不是选手选择的,但等于答案的次数。
if bList[x] != b and bList[x] == a:
count +=1
break
if i == 2500000:#测试250万次
break
print('选手不换门中奖的概率{:.2f}%\n'.format(count1/i*100))
print('选手换门后中奖的概率{:.2f}%'.format(count/i*100))
结果是这样的:
网友评论