前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >赌场游戏——幸运7真的幸运吗?(Python模拟仿真)

赌场游戏——幸运7真的幸运吗?(Python模拟仿真)

作者头像
阿黎逸阳
发布2021-04-14 15:55:27
3.2K0
发布2021-04-14 15:55:27
举报

有个因公众号认识的朋友分享给我一个问题,我觉得很有意思,就用Python实现了一下,大家可以一起来想一想。

问题描述

赌场有一种游戏,称为“幸运7”,游戏规则是你丢两个骰子,如果其点数之和为7你就赢4元,不是你就输1元,请你分析一下,这样的规则是否公平?如果“幸运7”游戏中得到的点数为7,用户赢钱的额度设为多少,能保证多轮(假设为10万轮)此游戏后玩家能处于赢钱的状态?

首先从统计学的角度来分析这个问题,假设两枚骰子是独立的,掷一次骰子,每枚筛子可能掷的点数都是从1到6之间的整数,合计有如下36种可能:

标黄的为点数之和是7的6种情况,可以发现赢的概率为:6/36≈0.16667。即16.667%的概率该名玩家会赢4元,83.33%的概率该名玩家会输1元。

用python模拟该过程,让计算机循环执行10万次,看这10万次中有多少次两枚骰子掷的点数之和为7,具体语句如下:

代码语言:javascript
复制
from random import *    
#导入随机模块

count = 0
#初始化筛子之和为7的计数
for i in range(100000):
    num1 = randint(1, 6)
    #产生一个1到6之间的随机数,作为筛子1的得数
    num2 = randint(1, 6)
    #产生一个1到6之间的随机数,作为筛子2的得数
    if num1 + num2 == 7:
        count += 1
        #如果两枚筛子抛掷的数值之和为7,则计数加1
print('10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:', count/100000*100,'%')
#输出打印结果

运行代码5次,结果分别是:

代码语言:javascript
复制
10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:16.743 %
10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:16.974 %
10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:16.583000000000002 
10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:16.445 
10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:16.900000000000002 %

可以发现计算机模拟的结果和统计分析的结果相差不超过0.01。

进一步尝试如果“幸运7”游戏中得到的点数为7,用户赢钱的额度设为多少,能保证多轮(假设为10万轮)此游戏后玩家能处于赢钱的状态?具体语句如下:

代码语言:javascript
复制
from random import *    
#导入随机模块


for j in range(2,10):
    y_money = 0
    #初始化赢钱金额
    s_money = 0
    #初始化输钱金额
    count = 0
    #初始化筛子之和为7的计数
    final_money = 0
    #初始化总计金额
    print('###############################')
    print('如果点数之和为7,赢钱额度为:', j)
    #打印当前赢钱额度取值
    for i in range(100000):
        num1 = randint(1, 6)
        #产生一个1到6之间的随机数,作为筛子1的得数
        num2 = randint(1, 6)
        #产生一个1到6之间的随机数,作为筛子2的得数
        if num1 + num2==7:
            count += 1
            #如果两枚筛子抛掷的数值之和为7,则计数加1
            y_money += j
            #如果两枚筛子抛掷的数值之和为7,则赢钱账户加j
        else:
            s_money += 1 
            #如果两枚筛子抛掷的数值之和不为7,则输钱账户加1
    final_money = y_money - s_money
    #循环结束后账户总计金额
    print('此时总计金额:', final_money)
    #打印账户的总计金额
    if final_money>0:
        print('当点数之后为7时,赢钱额度为:',j, ',此时玩客能赢钱')
        #如果账户的总计金额大于0,则说明用户此时能赢钱
    else:
        print('当点数之后为7时,赢钱额度为:',j, ',此时玩客会输钱')

运行代码5次,结果分别是:

结果1

代码语言:javascript
复制
###############################
如果点数之和为7,赢钱额度为:2
此时总计金额:-50458
当点数之后为7时,赢钱额度为:2 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:3
此时总计金额:-33580
当点数之后为7时,赢钱额度为:3 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:4
此时总计金额:-16690
当点数之后为7时,赢钱额度为:4 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:5
此时总计金额:-736
当点数之后为7时,赢钱额度为:5 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:6
此时总计金额:17586
当点数之后为7时,赢钱额度为:6 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:7
此时总计金额:33456
当点数之后为7时,赢钱额度为:7 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:8
此时总计金额:50813
当点数之后为7时,赢钱额度为:8 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:9
此时总计金额:65060
当点数之后为7时,赢钱额度为:9 ,此时玩客能赢钱

结果2

代码语言:javascript
复制
###############################
如果点数之和为7,赢钱额度为:2
此时总计金额:-49267
当点数之后为7时,赢钱额度为:2 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:3
此时总计金额:-33752
当点数之后为7时,赢钱额度为:3 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:4
此时总计金额:-16750
当点数之后为7时,赢钱额度为:4 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:5
此时总计金额:206
当点数之后为7时,赢钱额度为:5 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:6
此时总计金额:16886
当点数之后为7时,赢钱额度为:6 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:7
此时总计金额:32480
当点数之后为7时,赢钱额度为:7 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:8
此时总计金额:50012
当点数之后为7时,赢钱额度为:8 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:9
此时总计金额:67170
当点数之后为7时,赢钱额度为:9 ,此时玩客能赢钱

结果3

代码语言:javascript
复制
###############################
如果点数之和为7,赢钱额度为:2
此时总计金额:-49786
当点数之后为7时,赢钱额度为:2 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:3
此时总计金额:-32784
当点数之后为7时,赢钱额度为:3 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:4
此时总计金额:-17415
当点数之后为7时,赢钱额度为:4 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:5
此时总计金额:1070
当点数之后为7时,赢钱额度为:5 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:6
此时总计金额:16466
当点数之后为7时,赢钱额度为:6 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:7
此时总计金额:32184
当点数之后为7时,赢钱额度为:7 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:8
此时总计金额:49382
当点数之后为7时,赢钱额度为:8 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:9
此时总计金额:67850
当点数之后为7时,赢钱额度为:9 ,此时玩客能赢钱

结果4

代码语言:javascript
复制
###############################
如果点数之和为7,赢钱额度为:2
此时总计金额:-50068
当点数之后为7时,赢钱额度为:2 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:3
此时总计金额:-33016
当点数之后为7时,赢钱额度为:3 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:4
此时总计金额:-17170
当点数之后为7时,赢钱额度为:4 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:5
此时总计金额:284
当点数之后为7时,赢钱额度为:5 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:6
此时总计金额:17376
当点数之后为7时,赢钱额度为:6 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:7
此时总计金额:33936
当点数之后为7时,赢钱额度为:7 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:8
此时总计金额:49472
当点数之后为7时,赢钱额度为:8 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:9
此时总计金额:66790
当点数之后为7时,赢钱额度为:9 ,此时玩客能赢钱

结果5

代码语言:javascript
复制
###############################
如果点数之和为7,赢钱额度为:2
此时总计金额:-49876
当点数之后为7时,赢钱额度为:2 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:3
此时总计金额:-33372
当点数之后为7时,赢钱额度为:3 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:4
此时总计金额:-15535
当点数之后为7时,赢钱额度为:4 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:5
此时总计金额:-292
当点数之后为7时,赢钱额度为:5 ,此时玩客会输钱
###############################
如果点数之和为7,赢钱额度为:6
此时总计金额:16403
当点数之后为7时,赢钱额度为:6 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:7
此时总计金额:33984
当点数之后为7时,赢钱额度为:7 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:8
此时总计金额:49733
当点数之后为7时,赢钱额度为:8 ,此时玩客能赢钱
###############################
如果点数之和为7,赢钱额度为:9
此时总计金额:65720
当点数之后为7时,赢钱额度为:9 ,此时玩客能赢钱

分析5次代码运行结果知,如果点数之和为7,赢钱额度为4,此时玩家会输钱。

赢钱额度为5,此时玩家有可能会输钱,也有可能会赢钱,其中输钱的次数为2,赢钱的次数为3。

赢钱额度大于等于6,此时玩家会赢钱。

从Python仿真结果可以得出结论:点数之和为7你就赢4元,不是你就输1元,这样的规则是不公平的,如果玩的次数够多最后的结果都是玩家输钱。

如果赢钱的额度设为6,能保证多轮(10万轮)后玩家处于赢钱的状态。

感兴趣的朋友可以可以自己调整赢钱额度(步长设为小数)和循环轮数,分析一下结果会不会有什么不同。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-05,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com