1. 程式人生 > >利用Python分析羊車門問題

利用Python分析羊車門問題

題目描述:有3扇關閉的門,一扇門後面停著汽車,其餘門後是山羊,只有主持人知道每扇門後面是什麼。參賽者可以選擇一扇門,在開啟它之前,主持人會開啟另外一扇門,露出門後的山羊,然後允許參賽者更換自己的選擇。

1、按照你的第一感覺回答,你覺得不換選擇能有更高的機率獲得汽車,還是換選擇能有更高的機率獲得汽車?或機率沒有發生變化?

答:換機率更高,在電影《決勝21點》中看過這個問題。

 

 

2、請自己認真分析一下“不換選擇能有更高的機率獲得汽車,還是換選擇能有更高的機率獲得汽車?或機率沒有發生變化?” 寫出你分析的思路和結果。

 

答:可以把這題當作一個概率問題,分析如下:

   設三門後面分別為車,A羊,B羊。則第一次選門的時候,可以分為以下三種等概情況:

   情況1:車 1/3

      情況2A1/3

   情況3B1/3

   接下來,若不更換所選門:

   情況1:得車

  情況2:不得

  情況3:不得

   若更換所選門:

   情況1:不得

  情況2:得

  情況3:得

   顯然,換的情況概率為2/3,高於不換的1/3。故換選擇有更高的機率。

 

   此外,還可以用一種我自認為容易理解的解釋來說明我的答案:

    在主持人開啟羊門之後,剩下的門無非一扇車門,一扇羊門。若我們換門,那麼必然會改變先前的結果。(車門變羊門,羊門變車門)。

    於是可以認為,

    先前選到車門的概率==更換後選到羊門的概率;

   同理,

    先前選到羊門的概率==更換後選到車門的概率;

   也就是說,更換後選到車門的概率是2/3。而先前選到車門不換的概率是1/3。還是換選擇概率更高。

 

  注:和同學討論過後,這裡提一下我認為為什麼答案不是1/2

   如果換與不換得車概率均為

1/2。那麼題目就變為:“主持人先開啟一扇有羊的門,在剩下的兩個門中你進行選擇,求得車的概率。”

   我認為關鍵的是:若你不更換門的話,主持人開門這一事件並不影響你選到的是車門的概率。

 

 

3. 請設法編寫程式驗證自己的想法,驗證的結果支援了你的分析結果,還是沒有支援你的分析結果,請寫出程式執行結果,以及其是否支援你的分析。

答:基於上述分析,我認為其實根本不必模擬追蹤門的過程。

       方法如下:1).聲名兩個變數,mancar,分別代表你的初次選擇和車門的位置。

         再聲名兩個變數,換門獲勝數與不換門獲勝數,用於記錄結果。

       2).利用random庫中的randint產生1~3範圍內的隨機數,對兩個變數分別賦值。

       3).若賦值後,car==man,則說明一開始選擇的便是車門,

        此時,不換的獲勝數+1

            否則,意味著一開始選擇的是羊門,則換的獲勝數+1

       4).將上述過程重複足夠大的基數,計算概率,驗證結論。

 

       實驗結果如下:分別將過程重複1000遍,10000遍,十萬遍,一百萬遍。

         重複基數越大,不換與換獲勝的機率分別越接近於1/32/3。驗證了之前的猜想。

        

 

4請附上你的程式碼

程式碼如下:

import random as r

#總次數
total=1000000 #1000,1W,10W,100W
#換與不換的獲勝次數
win1=0
win2=0

for i in range(total):
    #模擬選擇過程
    man=r.randint(1,3)
    car=r.randint(1,3)
    #結果:一開始為車門,不換+1.
    #       否則則一開始為羊門,換+1.
    if man==car:
        win1+=1
    else:
        win2+=1

print("在{}次實驗中:".format(total))
print("若不更改門,獲勝概率為{:.3}%.".format((win1/total)*100))
print("若更改門,獲勝概率為{:.3}%.".format((win2/total)*100))