python趣味程式設計 羊車門問題

2021-10-20 20:16:46 字數 2775 閱讀 3821

我們今天看乙個非常有意思的問題。

問題描述:

你參加了一次**活動,有三個關閉的門。其中有乙個門後面裝的是汽車,後面兩個門後面裝的是山羊。主持人知道每扇門後面是什麼,你需要先選擇一扇門,在開啟它之前,主持人會在另外兩扇門中選擇一扇後面是山羊的門,開啟,這時候,你可以在還沒有開啟的兩扇門選擇,請問你是否更改你的選擇,是更改自己的選擇猜中汽車的概率大,還是不更改自己的選擇猜中汽車的概率大?

一般人是這麼想的:

遇到這個問題的時候,很多人可能會呼叫自己有限的數學知識。

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扇關閉的門,一扇門後停著汽車,另外兩扇門後是山羊,主持人知道每扇門後是什麼。參賽者首先選擇一扇門。在開啟它之前,主持人會從另外兩扇門中開啟一扇門,露出門後的山羊。然後允許參賽者更換自己的選擇。請問,參賽者更換選擇後,能否增加猜中汽車的機會?通過設計並編寫程式驗證,並給出自己的解釋...