問題介紹
三門問題,即蒙提·霍爾問題逆巍。蒙提·霍爾原本是美國電視游戲節(jié)目Let's Make a Deal的主持人及塘,蒙提霍爾問題就是源自該節(jié)目中的一個游戲。如果你是參賽者锐极,以下是節(jié)目現(xiàn)場的情況
你會看到三扇關(guān)閉的門笙僚,蒙提會告訴你每扇門后的獎勵:其中有一扇門后面是一輛車,而另外兩扇門后面則是諸如花生醬或假指甲之類不太值錢的東西灵再。獎品的擺放是隨機的肋层。
你的目標(biāo)就是要猜出哪扇門后是汽車。如果猜對翎迁,汽車就歸你了栋猖。
我們把你選擇的門稱為A門,其他兩扇門分別是B門和C門汪榔。
在打開你所選擇的A門之前蒲拉,蒙提往往會打開B門或C門擾亂你的選擇。(如果汽車確實是在A門后面,那蒙提隨機打開B門或C門都沒有問題全陨。)接下來爆班,蒙提會給你一個機會:你是堅持原來的選擇,還是選擇另一扇未打開的門
在看結(jié)果之前辱姨,我希望各位可以先想一下這兩者有區(qū)別么
代碼模擬
import random
doors = [0, 0, 0]
car_door_index = random.randint(0, 2)
doors[car_door_index] = 1
selected_sum = 0
i = 0
# 堅持原來選擇
while i < 500000:
selected_index = random.randint(0, 2)
selected_sum = selected_sum + doors[selected_index]
i = i + 1
print('堅持原來選擇柿菩,選到車的概率:', selected_sum / 500000)
# 換選擇
other_doors = [0, 0, 1]
other_car_index = random.randint(0, 2)
doors[car_door_index] = 1
selected_other_sum = 0
i = 0
# 循環(huán)500000次模擬結(jié)果
while i < 500000:
door_copy = other_doors[:]
# 先隨機選一扇門
select_index = random.randint(0, 2)
# 被打開門index
open_index = 0
# 然后打開一扇后面不是車的門,即列表中修改一個非1的元素
if door_copy[select_index] == 0:
for index, item in enumerate(other_doors):
if item != 1 and index != select_index:
open_index = index
break
if door_copy[select_index] == 1:
if select_index == 0:
open_index = random.randint(1, 2)
elif select_index == 1:
l = [0, 2]
open_index = l[random.randint(0, 1)]
else:
open_index = random.randint(0, 1)
# 打開(修改)另一扇們
door_copy[open_index] = -1
# 獲取改換主意的結(jié)果
door_copy[select_index] = -1
results = [r for r in door_copy if r != -1]
# print(results)
result = results[0]
selected_other_sum = selected_other_sum + result
i = i + 1
print('選擇另一扇雨涛,選到車的概率:', selected_other_sum / 500000)
結(jié)果展示
- 運行了兩次
堅持原來選擇枢舶,選到車的概率: 0.333622
選擇另一扇,選到車的概率: 0.667554
堅持原來選擇替久,選到車的概率: 0.333422
選擇另一扇凉泄,選到車的概率: 0.667566
- 按原來選擇毫無疑問是1/2,換選擇之后選到車的概率是2/3蚯根。
最后
- 感覺和真相還是有差距的