关于三门问题的设定和相关讨论有很多,这篇比较详尽:
https://liam.page/2018/02/26/Monty-Hall-problem/
注意主持人打开的门一定是空的(是羊)!!!所以这个事件出现的概率是1,而不是2/3什么的。
我这里贴了一个小的python脚本,实践得真知,看看换门或者不换门得到汽车的最终概率是多少?
import random as rd
class Experiment:
exp_count = 0
def __init__(self, change=0):
seq = [0, 1, 2]
Experiment.exp_count += 1
self.if_change = change
# 随机构建序列,表示每个门后面有什么,1表示该门后面有车
self.base = [0, 0, 0]
self.base[rd.randint(0, 2)] = 1
# (参与者)选择门
self.choice = rd.randint(0, 2)
# (主持人)选择门: 策略是选择其他两扇门中不是车的门,如果两个都不是车,随机选择一个
seq.remove(self.choice) # 从 0 ,1 ,2 门派号中移除掉参与者选的,供主持人选择
for index in seq:
if self.base[index] == 1:
seq.remove(index) # 主持人能选到车的话,移除这个选择(选择另一扇门)
break
if len(seq) == 1:
self.choice_host = seq[0]
else:
self.choice_host = rd.choice(seq)
self.sucess = 0
def start(self):
if self.if_change ==0: # 如果不交换
if self.base[self.choice] == 1:
self.sucess = 1
else:
self.sucess = 0
if self.if_change == 1: # 如果交换
seq = [0, 1, 2]
seq.remove(self.choice)
seq.remove(self.choice_host)
cur_choice = seq[0]
if self.base[cur_choice] == 1:
self.sucess = 1
else:
self.sucess = 0
def main():
success_count = 0
for i in range(10000000): # 实验次数
x = Experiment(change=1) # 默认不交换,change = 1 交换
x.start()
if x.sucess == 1:
success_count += 1
print(success_count / Experiment.exp_count) # 打印成功拿到车的概率
main()
简单实验两次,如果按照游戏的规则,主持人始终会打开一扇没有车的门,则不换的时候最终得到车的概率约为1/3,换的时候得到的概率为2/3。