我們今天看乙個非常有意思的問題。
問題描述:
你參加了一次**活動,有三個關閉的門。其中有乙個門後面裝的是汽車,後面兩個門後面裝的是山羊。主持人知道每扇門後面是什麼,你需要先選擇一扇門,在開啟它之前,主持人會在另外兩扇門中選擇一扇後面是山羊的門,開啟,這時候,你可以在還沒有開啟的兩扇門選擇,請問你是否更改你的選擇,是更改自己的選擇猜中汽車的概率大,還是不更改自己的選擇猜中汽車的概率大?
一般人是這麼想的:
遇到這個問題的時候,很多人可能會呼叫自己有限的數學知識。
1:如果不更改,就相當於是在三扇門中隨機選擇了一扇門,總數是三個,汽車的數量是乙個。那麼選中汽車的概率就是1/3.
2:如果更改自己的選擇,由於主持人排除了乙隻山羊,那麼就只剩下乙個山羊和一輛汽車,在其中更改以後相當於隨機選擇,概率就是1/2.
邏輯很正確,可惜,錯了。
程式設計師是這麼想的:
用python模擬一下,結果是
最後的結果是,如果不更改選項,獲得汽車的概率是33%
如果更改選項,獲得汽車的概率是66%。
我們來看一看具體的方案。
我們用python模擬一下這個問題。
首先我們匯入random
因為選擇是隨機的,我們需要匯入這個模組去生成隨機數。
隨後,我們設定一下迴圈的次數times。也就是進行多少次模擬。
再設定乙個變數no_choice_n。代表的就是如果不進行更換。
一共可以多少次獲得汽車
from random import*
times = 1000
no_choice_n=0#初始化不改獲得汽車的次數
choice_n=0#初始化更改獲得汽車的次數
doors=['汽車','山羊','山羊']
還有乙個choice_n。意思就是如果更改選擇,可以多少次獲得汽車
初始化我們將它們全部設定成0,模擬中,每成功一次將它加上一。
對於汽車和山羊,我們定義乙個列表,其中有兩個山羊,乙個汽車。
首先我們來迴圈times次。模擬不更改選擇時,判斷一共選中了汽車多少次。如果不更改選擇,那麼就相當於在三個門中隨機選擇一扇門,然後開啟,
我們用first_choice = randint(0, 2)。隨機生成0,1,2三個數。分別水印doors列表中的汽車山羊,山羊。
if doors[first_choice]=='汽車':
no_choice_n=no_choice_n+1
else:
pass
就加上1。
最後一共是成功了no_choice_n次
成功率是print(no_choice_n/times)
當我們選擇更改門的時候,就要考慮主持人開啟的那扇門了。主持人肯定會找一扇後面是山羊的門開啟。用計算機模擬的時候,我們就在0,1,2中隨機選乙個數。選擇的數不能和我第一次選擇的數重複,也不能背後是汽車。
如果不滿足這兩個條件,就要重新選擇,一直到選中滿足兩個條件的門為止。
這裡用到的是while迴圈。
然後,我們還要選出剩下的那個門,也是用到while迴圈,如果和前面的兩扇門重複,就要重新選擇,一直到選中剩下的門為止。
最後,我們判斷一下剩下的這個門是不是汽車,如果是汽車,那麼我們就讓
choice_n+1。
最後的結果是,如果不更改選項,獲得汽車的概率是33%
如果更改選項,獲得汽車的概率是66%。
最後列印出更改選擇時候的正確率。
完整**如下:
from random import*
times = 1000
no_choice_n=0#初始化不改獲得汽車的次數
choice_n=0#初始化更改獲得汽車的次數
doors=['汽車','山羊','山羊']
#當你選擇不更改選擇時
for i in range(0,times):
first_choice = randint(0, 2)
if doors[first_choice]=='汽車':
no_choice_n=no_choice_n+1
else:
pass
print(no_choice_n/times)
#當你選擇更改選擇時
for i in range(0,times):
first_choice = randint(0, 2)
while 1:
host_choice = randint(0, 2)
if host_choice == first_choice or doors[host_choice] == '汽車':
host_choice = randint(0, 2)
else:
break
second_choice=randint(0, 2)
while 1:
if second_choice==host_choice or second_choice==first_choice:
second_choice=randint(0, 2)
else:
break
if doors[second_choice]=='汽車':
choice_n=choice_n+1
else:
pass
print(choice_n/times)
python羊車門問題 羊車門問題python模擬
題目描述 有3扇關閉的門,一扇門後面停著汽車,其餘門後是山羊,只有主持人知道每扇門後面是什麼。參賽者可以選擇一扇門,在開啟它之前,主持人會開啟另外一扇門,露出門後的山羊,然後允許參賽者更換自己的選擇。作業要求如下,需在博文中回答如下問題,回答問題時,先複製題目,然後再換行書寫答案 1 按照你的第一感...
python羊車門 羊車門 python 作業
作業完 學號 20181004068,邸旺旺 學號 20181004071,汪立然 1.換選擇能有更高的機率獲得汽車 2.分析一 假設 一號門 二號門三號門羊車 羊玩家選一號門,換 得到車 不換 羊 玩家選二號門,換 羊 不換 車 玩家選三號門,換 車 不換 羊 綜上所述 玩家換得到車的概率為2 3...
羊車門問題
羊車門問題描述 有3扇關閉的門,一扇門後停著汽車,另外兩扇門後是山羊,主持人知道每扇門後是什麼。參賽者首先選擇一扇門。在開啟它之前,主持人會從另外兩扇門中開啟一扇門,露出門後的山羊。然後允許參賽者更換自己的選擇。請問,參賽者更換選擇後,能否增加猜中汽車的機會?通過設計並編寫程式驗證,並給出自己的解釋...