一夜暴富還是傾家蕩產?Python模擬賭博實驗

七月線上實驗室發表於2018-04-18

在知乎上看見這麼一個問題:既然賭博每局的勝率為50%,為何最終有那麼多人會賭到傾家蕩產?

似乎挺有道理的,有人就是想不通,勝率50%,長期應該是各有勝負,為何會有人傾家蕩產,對於這個問題我們不妨用Python做一個模擬實驗。


實驗思路:

  1. 賭博方式設定為玩骰子、猜大小,一天賭一次,每局一莊一閒,直到閒家輸光或者賭場下班(假設賭場也會下班);

  2. 賭徒認為勝負是純運氣時間,堅信不可能把把開大(或開小),所以在連輸三把之後,賭徒會加註50%;

  3. 賭徒共有一百萬元存款,第一次參加賭局會攜帶兩萬元現金;

  4. 賭徒輸光存款之後會嘗試借高利貸扳本(保守估計月利率5%,國家規定的高利貸利率上限3%,據說賭場高利貸會高很多,具體多少不明);

  5. 借高利貸之後第二天立即歸還(一般賭徒很少還錢這麼快的,假設我們模擬的是一個“自律”的賭徒)。


試驗步驟

1. 建立人物

class gambler():
    def __init__(self):
        self.deposit = 1000000  # 百萬存款,這裡不考慮不動產
        self.bet = 20000  # 賭資
        self.usury = 0  # 借貸
        self.lose = 0  # 連輸局數
Cathala = gambler()#賭博商人卡達拉Cathala.bet = 100000000Cathala.deposit = 100000000

640?wx_fmt=png&wxfrom=5&wx_lazy=1
賭場

Geralt = gambler()#Geralt是一名狂熱的賭博愛好者

640?wx_fmt=png
這是一個喪心病狂的賭徒


2. 建立賭局

今天我們不玩昆特牌,玩色子。

640?wx_fmt=png
就是這個靠運氣的遊戲

下面是賭局的函式實現:

bet = 1000#每一把1000塊count = 0gambling_list = []#記錄每局比賽的輸贏
def gambling(gambler_a,gambler_b,bet,count):
#a是莊家,b是閒家,bet是當局賭注,count是當前的賭局編號    point = random.randint(2, 12)  # 骰子點數    guess = random.randint(0, 1)  # 猜大小,0為小,1為大    if (point > 7 and guess == 1) or (point <= 7 and guess == 0):  # 猜對了        Geralt.bet += bet        Cathala.bet -= bet        return True    else:        Geralt.bet -= bet        Cathala.bet += bet        return False

是男人就玩100局

def One_day_gambling():
    Geralt.bet = 20000
    bet = 1000
    count = 0
    while True:
        gambling_list.append(gambling(Cathala, Geralt, bet,  count))
        count += 1
        if count > 3 and gambling_list[count - 3] == gambling_list[count - 2] == 
gambling_list[count - 1] == False:            bet = bet * 1.5
#連輸三局加賭注,加完之後如果還輸繼續加,贏了賭注保持不變        if Geralt.bet <= -5000 or count >= 100:
#每天最多隻敢借五千的高利貸,每天最多100局,其實大部分都玩不到100局就輸光了            break    return Geralt.bet-20000#返回每天獨居結束時的負債或盈利

然後我們把每天的輸贏都記錄下來,最後統計一下有沒有破產。

def record_daily_gambling():
    debt = []#記錄每一天的最終盈虧
    for i in range(3000):
        n = One_day_gambling()        
          if n<0:
          #小於零就要借高利貸了,計一天的利息            n = n*1.00167        debt.append(n)        
           if sum(debt) <= -1000000:#一百萬輸光算破產            return (sum(debt),i)
           #破產後記下最終輸掉的資金,以及破產時間    return (sum(debt),3000)#一直沒有破產的人def main():    every_example = pd.DataFrame()    lost_money = []    bankrupt_time = []    for j in range(1000):        m = record_daily_gambling()        lost_money.append(m[0])        bankrupt_time.append(m[1])        print(j)    every_example['lost_money'] = lost_money    every_example['bankrupt_time'] = bankrupt_time    every_example.to_csv('experiment_data.csv',index=False,sep=',')
           if __name__ == "__main__":    main()


3. 統計資料

總共模擬了1000人,其中未破產的有167人(其中虧損3人,盈利164人),破產833人,破產率83.3%,基本上最後都破產了,我們看看大家各自的破產時間吧。

640?wx_fmt=png
破產時間分佈 


那麼最後沒有破產的人呢?最終盈利多少呢?

640?wx_fmt=png
未破產人員的八年總盈利 

其中最富有的贏了1250萬,一千萬以上的只有六個。


看起來很多對吧,我們繼續往下看:

這是中國這近十年的通貨膨脹率(官方資料): 

640?wx_fmt=png
近十年通貨膨脹率 

但是實際通貨膨脹率要比官方資料(根據居民消費指數)高得多(十年前兩塊錢一個的肉夾饃如今已經要十塊錢了,按3%算,現在肉夾饃應該賣兩塊7毛錢~),為何會有這麼大偏差呢,因為國家統計的CPI(居民消費指數)還是採用的1997年以前的標準,沒有將買房支出算入CPI中。
網上查到的認可度比較高的說法是近十年的通貨膨脹率已經達到了13%,暫且按13%計算的話,8年後的1250萬僅相當於今天的553萬,1000個身家100萬的人,沒日沒夜地撲在賭桌上,花了八年時間,最多的一個人也只掙了553萬。


結論

  1. 模擬賭博破產率高達83.3%,且有一半人在一年內破產;

  2. 因為賭博盈利的隨機性,利潤率並不高,說明賭博並不能作為一個發家致富的手段;

  3. 贏倒賭場的可能性幾乎為0。


推薦閱讀

獲贊2萬,一文讀懂深度學習

如何準備機器學習工程師的面試?

精選 | 6款超讚的最新AI開源專案!

使用 Python 實現資料視覺化(完整程式碼)

學會這10種機器學習演算法,你才算入門(附教程)

640?wx_fmt=png

相關文章