# 藝Fun券抽籤方式機率分析 由於本次藝Fun券的抽籤方式有許多爭議,也有許多人覺得不太公平(包括我,尾數6QQQ) ![](https://i.imgur.com/7zgzKqN.jpg) 圖片來源:直播截圖 因此決定寫個小程式模擬抽籤過程,看看是不是真的某幾號機率比較低 ### **P.S. 本文討論的範圍只有直播上看見的抽獎過程,不考慮一開始主辦聲稱隨機排列的數字順序** --- 遊戲規則為: * 箱子內有10顆球,編號0~9,從中抽出兩顆,抽完不放回 * 將抽到的兩顆球號碼相加取其個位數當作該回合走的步數 * 若碰到抽過的號碼就跳過並不算入步數 * 重複直到中籤人數超過200萬人 \ 首先第一個問題是簡單的高中排列組合問題,將所有組合數列出來相加並取其個位數後,紀錄下每個步數可能出現的次數,得到以下結果: ``` [4, 5, 4, 5, 4, 5, 4, 5, 4, 5] ``` 可看出走0~9步的機率大致相同 但還是有些許的差異,也就是奇數步會較偶數步多1/9的機率。 接下來利用上方得到的結果建立45個元素的list ``` [0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9] ``` 待會兒就利用random的方式隨機取出此list的某個元素,代表該回合所走的步數。 --- 接下來來模擬輪盤的順序 ![](https://i.imgur.com/qRubmUH.png) ``` circle = [-1, 5, 9, 7, 1, 4, -1, 6, 0, 3, 8, 2] ``` 如上,-1代表再來一次 接下來就是實作抽籤的過程: ```python= win = [0]*10 # 用來紀錄尾數多少的中籤 circle = [-1, 5, 9, 7, 1, 4, -1, 6, 0, 3, 8, 2] now = 0 # now為目前所在點 while True : step = random.randint(0, 44) # 決定此回合步數 step = table[step] for i in range(step): now = now+1 if now >= len(circle) : # 走回原點 now = 0 if circle[now] != -1 : win[circle[now]] = win[circle[now]]+1 circle.remove(circle[now]) # 抽中的remove now = now-1 if len(circle) == 5 : # 抽籤結束 break ``` 這裡有個問題是,由於沒有公開抽籤的人數有多少,因此無法正確決定要抽幾個人,但照每個尾數的人數都是約30萬來看,就設定結束條件為抽7個人。 --- 試跑一次看看: ![](https://i.imgur.com/c8yoUEV.png) 6還是沒中是三ㄒ...... --- 由於要算的是機率,因此直接用個一百萬的迴圈讓他跑吧: ![](https://i.imgur.com/ALNHd4T.png) 詳細的機率: ``` [0.715496, 0.701197, 0.645745, 0.719198, 0.685382, 0.717062, 0.716673, 0.712672, 0.675166, 0.711409] ``` 再跑兩次試試: ``` [0.71561, 0.700658, 0.646296, 0.71908, 0.685102, 0.716363, 0.716696, 0.713606, 0.674322, 0.712267] [0.715542, 0.699664, 0.646458, 0.719945, 0.686013, 0.715975, 0.715949, 0.713043, 0.674878, 0.712533] ``` 出來的數值都差不多,應該接近收斂了。 由結果可以看到,尾數2的機率真的較其他數字低不少,只有大約64.6%的機率 而機率最高的是尾數3,有71.9%的機率 而我自己的尾數6竟然也有71.6%的機率... 本來做這實驗是想安慰自己的,結果只是證明自己是真的運氣差QQQQQQ 文章最後附上 [原始碼連結](https://github.com/sonic55567/YiFun-Ticket-Analysis/blob/master/YiFun.py)