發表文章

目前顯示的是 1月, 2021的文章

【Python練習】實現蒙提霍爾問題

圖片
  (Picture from wiki) 目標: 使用Python代碼來解答蒙提霍爾問題 步驟: 1.拆解蒙提霍爾問題 2.代碼如何實現 3.圖表及結論 1.拆解蒙提霍爾問題 1.1概述 蒙提霍爾是個十分反直覺的問題(更詳細可參考維基百科: 蒙提霍爾問題 ),情況如下: 有三扇門後面有兩支山羊一台車,在選擇一扇門以後,另外兩扇門其中一扇們被打開裡頭是一支山羊,這時候有一次的機會選擇: *要換門 *還是堅持不換門 問題是換門or不換門哪個方式選中車子的機率比較高呢? 1.2 先設定變數 假設我們是來賓(guest),然後會有第一次選擇門的機會,然後會有一個主持人(host)在我們選擇門以後幫我們打開另外兩扇門的其中一扇,並且在主持人開門後我們可以再選擇要換門或者不要換門。有了這個故事情節,就可以先有五個變數: *guest_first:來賓第一次選擇門 *host_open:主持人開另外兩扇門其中一扇 *guest_second:來賓選擇要不要換門 *change: 換門 *not_change: 不換門 1.3整理一下三觀 *[注1] 多次重複實驗過程,可以使用迴圈(for loop) *[注2] 主持人開門(host_open)的結果必須是山羊而不是車子(如果主持人開門後結果是車子遊戲就沒意義) *[注3] 以上帝視角:如果來賓第一次(guest_first)選到車子,最好的策略就是不要換門(not_change) *[注4] 以上帝視角:如果來賓第一次(guest first)選到山羊,主持人開門後是另外一支山羊,最好的策略就是換門(change) 2.代碼如何實現 import random as random import matplotlib.pyplot as plt %matplotlib inline random.seed(0) change = 0 not_change = 0 times = 100000 # 計算10萬次 # [注1]多次重複實驗過程,可以使用迴圈(for loop) for i in range(times):     # 先創造兩支山羊跟一台車子的門     doors = ['goat_1', 'goat_2', 'car']     random.shuffle(do