羊車門問題

2022-07-17 06:12:09 字數 4607 閱讀 3245

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

作業要求如下,需在博文中回答如下問題,回答問題時,先複製題目,然後再換行書寫答案:

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

答:我當時覺得肯定是不更換選擇 獲得汽車的概率高啊,因為最開始獲得汽車的概率是1/3,假如更換了的話肯定沒這麼高的概率啦。所以當老師說:「 覺得不更換選擇獲得汽車的機率更高的同學舉下手。」,我高高舉起的手微微顫抖。。。。

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

答:①這是參賽者不更換選擇的情況,假如參賽者相信自己的直覺不更換選擇的話,獲得汽車的概率是1/3;②這是參賽者更換選擇的情況,假如參賽者第一次選中了汽車門(概率1/3)並且換了的話,最終肯定是不能得到汽車的,故排除這種可能;③假如參賽者第一次選中的是羊門且選擇更換(由於主持人開啟了一扇羊門了,所以更換選擇後一定是車門),這種情況選中汽車門的總概率是2/3;額,這個就很尷尬啦,如果我這個分析沒錯的話嗎,仔細分析一波之後,和我最初的猜想不一樣。what the hell!!!

答:額,先說點廢話吧。我覺得我做這道羊車門問題還是挺失敗的。我看了這道題的題目之後,並沒有想著直接去啪嗒啪嗒地直接去敲鍵盤計算概率,而是想著先編寫**去模擬這個參賽者和主持人互動的這個過程,再來計算概率,沒辦法 這就是我這個lz的解題思路。個人感覺真的是很艱辛的,一點一點地去試錯。然後再在這個基礎之上去計算概率。在模擬參賽者和主持人互動的這個過程中,我這個python小白新學會了random.sample(list,n)去在列表list中隨機獲取n個元素組成片段。直接結合**旁邊的注釋去理解我這個lz的思路吧,真的是嘔心瀝血地敲(xie)**(bug),現在已經是凌晨啦,關鍵還是我太菜了,一道這種題居然要這麼久才能解決。

4、我的**。

1

#假設有3扇門,序號為1,2,3,根據參賽者輸入的數字來開門2#

假設使用者輸入非常友好啊,不會非法輸入,所以小白這段**沒有健壯性3#

coding: utf-8

4import random as rd #

引入隨機數

5print("

已知有3扇關閉的門,序號為1,2,3,一扇門後面停著汽車,其餘門後是山羊")

6 l = [1,2,3] #

列表l內的元素表示3個門

7 car = rd.randint(1,3) #

在1,2,3這三扇門之間產生隨機數

8 x = eval((input("

請選擇參賽者想要開的門:

"))) #

x為參賽者他選擇的門

9 l.remove(x) #

主持人在開啟參賽者選擇的門前,會先開啟另外一扇門

10if x != car: #

防止參賽者選擇的門正好是車門,但x已不在列表的情況

11 l.remove(car) #

主持人已經知道了哪個是車門,且依據題意,第一次不會開啟那扇車門,會開啟一扇羊門

12 s = rd.sample(l,1) #

從列表l中隨機獲取5個元素,作為乙個片斷s返回,這樣可以防止x=car時,列表l中還存在兩個值

13for i in s: #

i為主持人要開啟的那扇門

14 y = i #

y為主持人第一次開啟的那扇門

15print("

主持人開啟了第{}扇門,露出了門後的山羊

".format(y)) #

主持人開啟所謂的另外一扇門,露出門後的山羊

16 l = [1,2,3] #

列表l內的元素表示3個門

17 n = input("

參賽者是否更換選擇:1.更換選擇 2.不更換,相信自己的直覺")

18if n == 1: #

若參賽者更換選擇

19 l.remove(x) #

參賽者要求更換選擇,所以不可能取到再在列表l中取到當初輸入的那個數x

20 l.remove(y) #

主持人已經開啟了這扇門,所以也不可能再取到

21for j in l: #

j為參賽者更換選擇後 他所選擇的那扇門

22print("

參賽者更換了選擇,主持人開啟了參賽者選擇的第{}扇門

".format(j))

23if j == car: #

判斷參賽者最終選擇的門是否為車門

24print("

參賽者獲得了汽車")

25else:26

print("

很遺憾,這扇門後面是山羊")

27if n == 2: #

若參賽者沒有更換選擇,相信自己的直覺

28print("

參賽者沒有更換選擇,主持人開啟了參賽者選擇的第{}扇門

".format(x))

29if x ==car:

30print("

參賽者獲得了汽車")

31else:32

print("

很遺憾,這扇門後面是山羊

")

下面來看計算概率的那段**,為了節省計算時間,我只算了更換選擇後抽中汽車的概率,因為與它對立的一定就是沒有更換選擇的情況下抽中汽車的概率。

1

#假設有3扇門,序號為1,2,3,根據參賽者輸入的數字來開門2#

假設使用者輸入非常友好啊,不會非法輸入,所以小白這段**沒有健壯性3#

coding: utf-8

4import random as rd #

引入隨機數

5 times = 100000 #

在此處定義迴圈次數,便於更換迴圈次數

6 count = 0 #

用total來記錄參賽者更換選擇後抽中汽車的次數

7print("

已知有3扇關閉的門,序號為1,2,3,一扇門後面停著汽車,其餘門後是山羊")

8 car = rd.randint(1,3) #

在1,2,3這三扇門之間產生隨機數

9for k in

range(times):

10 l = [1,2,3] #

列表l內的元素表示3個門

11 x = rd.choice(l) #

x為參賽者他選擇的門

12for a in range(1,4):

13if a ==x:

14 l.remove(a) #

主持人在開啟參賽者選擇的門前,會先開啟另外一扇門

15if a != car: #

防止參賽者選擇的門正好是車門,但x已不在列表的情況

16 l.remove(car) #

主持人已經知道了哪個是車門,且依據題意,第一次不會開啟那扇車門,會開啟一扇羊門

17 s = rd.sample(l,1) #

從列表l中隨機獲取5個元素,作為乙個片斷s返回,這樣可以防止x=car時,列表l中還存在兩個值

18for i in s: #

i為主持人要開啟的那扇門

19 y = i #

y為主持人第一次開啟的那扇門,露出門後的山羊

20 l = [1,2,3] #

列表l內的元素表示3個門

21 n = rd.randint(1,2)#

參賽者是否更換選擇:1.更換選擇 2.不更換,相信自己的直覺

22if n == 1: #

若參賽者更換選擇

23 l.remove(x) #

參賽者要求更換選擇,所以不可能取到再在列表l中取到當初輸入的那個數x

24 l.remove(y) #

主持人已經開啟了這扇門,所以也不可能再取到

25for j in l: #

j為參賽者更換選擇後 他所選擇的那扇門

26if j == car: #

判斷參賽者最終選擇的門是否為車門

27 count += 1 #

參賽者更換選擇後抽中汽車

28 p1 = count / times #

參賽者更換選擇後抽中汽車的概率

29 p2 = 1 - p1 #

參賽者沒有更換選擇抽中汽車的概率

30print("

參賽者更換選擇後抽中汽車的概率為{},沒有更換選擇直接抽中汽車的概率為{}

".format(p1,p2))

啊呀呀,終於寫完了,1點51啦 快2點啦,終於可以睡覺覺啦,雖然明天第一節就是體測,心疼我的室友,茶軸啪嗒啪嗒的敲擊聲。。。。

python羊車門問題 羊車門問題python模擬

題目描述 有3扇關閉的門,一扇門後面停著汽車,其餘門後是山羊,只有主持人知道每扇門後面是什麼。參賽者可以選擇一扇門,在開啟它之前,主持人會開啟另外一扇門,露出門後的山羊,然後允許參賽者更換自己的選擇。作業要求如下,需在博文中回答如下問題,回答問題時,先複製題目,然後再換行書寫答案 1 按照你的第一感...

羊車門問題

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

羊車門問題

1 換的機率比較大 2 換的機率比較大,因為不換的話只有抽到車的時候正確,概率為1 3,換的話抽到羊的時候正確,概率為2 3 3 支援了,換抽到車的機率為0.33,不換機率為0.66 4 usr bin env python coding utf 8 import random import sys...