美文网首页个人专题Python建模与NLP随手记
赌博为什么能赌到倾家荡产?--Python模拟赌博实验

赌博为什么能赌到倾家荡产?--Python模拟赌博实验

作者: dalalaa | 来源:发表于2017-08-17 16:11 被阅读2476次

    在知乎上看见这么一个问题:既然赌博每局的胜率为50%,为何最终有那么多人会赌到倾家荡产?

    似乎挺有道理的,有人就是想不通,胜率50%,长期应该是各有胜负,为何会有人倾家荡产,对于这个问题我们不妨用Python做一个模拟实验。

    实验思路:

    1. 赌博方式设定为玩骰(这字念tou、二声,意不意外)子、猜大小,一天赌一次,每局一庄一闲,直到闲家输光或者赌场下班(假设赌场也会下班);
    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 = 100000000
    Cathala.deposit = 100000000
    
    赌场
    Geralt = gambler()#Geralt是一名狂热的赌博爱好者
    
    这是一个丧心病狂的赌徒

    2. 创建赌局

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

    就是这个靠运气的游戏

    下面是赌局的函数实现:

    bet = 1000#每一把1000块
    count = 0
    gambling_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%,基本上最后都破产了,我们看看大家各自的破产时间吧。


    破产时间分布

    那么最后没有破产的人呢?最终盈利多少呢?


    未破产人员的八年总盈利
    其中最富有的赢了1250万,一千万以上的只有六个。

    看起来很多对吧,我们继续往下看:

    这是中国这近十年的通货膨胀率(官方数据):

    近十年通货膨胀率
    但是实际通货膨胀率要比官方数据(根据居民消费指数)高得多(十年前两块钱一个的肉夹馍如今已经要十块钱了,按3%算,现在肉夹馍应该卖两块7毛钱~),为何会有这么大偏差呢,因为国家统计的CPI(居民消费指数)还是采用的1997年以前的标准,没有将买房支出算入CPI中。
    网上查到的认可度比较高的说法是近十年的通货膨胀率已经达到了13%,暂且按13%计算的话,8年后的1250万仅相当于今天的553万,1000个身家100万的人,没日没夜地扑在赌桌上,花了八年时间,最多的一个人也只挣了553万。

    结论

    1. 模拟赌博破产率高达83.3%,且有一半人在一年内破产;
    2. 因为赌博盈利的随机性,利润率并不高,说明赌博并不能作为一个发家致富的手段;
    3. 赢倒赌场的可能性几乎为0。

    有兴趣转行机器学习的朋友可以加群:


    机器学习-菜鸡互啄群

    相关文章

      网友评论

      • 米莎德:if __name__ == "__main__":您好,这句是什么意思呀
        dalalaa:这句话可以理解为程序的主体,是直接调用这个py文件时会自动运行的部分
      • Iam威达:厉害
      • Iam威达:厉害
      • 唐桑阿米达:看完这篇文章。只是想知道 你为什么这么厉害
      • 滑稽的命运:拉风投开赌场啊
      • 技术寇:然后赌场再出个欠,专搞那些赚的多的。胜率就要低一些,所以不要赌博,开赌场吧
        dalalaa: @kouchao 你这思路有点跑偏啊😱
      • YOSHIKI_79b4:赌场的规则并不是50%的胜率,只是你觉得而已。所以赌场输钱的可能性更小
        YOSHIKI_79b4: @dalalaa 我是输了不少钱,貌似只有21点在会计算的情况下玩家赢的概率是50.3%。百家乐的概率是赌场赢的可能性大,而且赌场还要抽水,之前是庄赢抽5%,现在去庄6点赢赔一半,所以怎么也干不赌场
        60be8d330575:作者的意思应该是赢和输各自50%,加起来是一个全概率
        dalalaa:看来你赢了不少钱嘛,你认为赌博胜率有多少?
      • 588c11d26006:骰子,二声,意不意外
        dalalaa: @爱上猫的鱼5401 嗷~~写错了😣

      本文标题:赌博为什么能赌到倾家荡产?--Python模拟赌博实验

      本文链接:https://www.haomeiwen.com/subject/jlrmrxtx.html