三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?如果严格按照上述的条件,即主持人清楚地知道,自己打开的那扇门后是羊,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。
这个问题亦被叫做蒙提霍尔悖论:虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起一阵热烈的讨论。
下面将问题描述为三个箱子的问题,三个箱子中只有一个箱子里有奖品,其余两个为空箱子,选定了一个箱子,再打开一个没有奖的箱子,问你换不换,是换概率大还是不换概率大。
使用Python代码来验证这个问题:
import random
#不换箱子选中有奖品箱子的概率
n1 = 0
#换箱子后选中有奖品的概率
n2 = 0
#假设第一个箱子有奖品
box = ["YES","NO","NO"]
for i in range(1000):
label = [0,1,2]
temp = box.copy()
#随机选择一个箱子
first = random.choice(label)
#移除所选的箱子
temp.remove(box[first])
#判断奖品是否还在剩余的两个箱子中。如果不在说明选中了有奖品的箱子n1加1,
#如果奖品仍在剩余的的两个箱子中n2直接加1(相当于模拟打开了一个箱子是空箱子后选择换箱子)
if "YES" in temp:
n2 += 1
else:
n1 += 1
print(n1,n2)