Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >赌场游戏——幸运7真的幸运吗?(Python模拟仿真)

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

作者头像
阿黎逸阳
发布于 2021-04-14 07:55:27
发布于 2021-04-14 07:55:27
5.6K00
代码可运行
举报
运行总次数:0
代码可运行

有个因公众号认识的朋友分享给我一个问题,我觉得很有意思,就用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
代码运行次数:0
运行
AI代码解释
复制
from random import *    
#导入随机模块

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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)
        #产生一个16之间的随机数,作为筛子1的得数
        num2 = randint(1, 6)
        #产生一个16之间的随机数,作为筛子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
代码运行次数:0
运行
AI代码解释
复制
###############################
如果点数之和为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
代码运行次数:0
运行
AI代码解释
复制
###############################
如果点数之和为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
代码运行次数:0
运行
AI代码解释
复制
###############################
如果点数之和为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
代码运行次数:0
运行
AI代码解释
复制
###############################
如果点数之和为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
代码运行次数:0
运行
AI代码解释
复制
###############################
如果点数之和为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 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
逢赌必赢的秘密
本文由CDA作者库成员麻赛原创,并授权发布 原文来自公众号麻大湿讲数据(ID:madashi_data)。 首先是麻大湿的老实交代 这篇文章标题党了,你不能学到逢赌必赢的秘密,要是真有这本事我还写公众
CDA数据分析师
2018/02/24
2.8K0
逢赌必赢的秘密
Python简单试题3
1,水仙花数 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身 (例如:1^3 + 5^3+ 3^3 = 153) 代码如下: 方法一: for i in range(100,1000): # 进行for循环 num = i a = num % 10 # 取出个位数 num = num // 10 # 向下整除 b = num % 10 # 取出十位数 num = num // 10 c = num % 10 num = num
py3study
2020/01/15
8750
号称「永远不会输钱」的马丁格尔策略
点进来,说明你想赢,那我们直入主题。 ---- 所谓「马丁格尔(Martingale)策略」是在某个赌盘里,当每次「输钱」时就以 2 的倍数再增加赌金,直到赢钱为止。 假设在一个公平赌大小的赌盘,开大与开小都是 50% 的概率,所以在任何一个时间点上,我们赢一次的概率是 50%,连赢两次的概率是 25%,连赢三次的概率 12.5%,连赢四次的概率 6.25%,以此类推。因此,以概率来算,如果连赢四次的概率 6.25%,也就是说连输四次的概率一样也只有6.25%。 假设我们有 63 元,按照马丁格尔策略理论
临书
2018/03/07
6.3K0
号称「永远不会输钱」的马丁格尔策略
Python从0到100(六):Python分支和循环结构的应用
单分支结构是分支结构中最简单的一种方式,单分支结构只需要判断一个条件,根据这个条件是否成立来决定是否执行一段语句。
是Dream呀
2024/03/18
5010
Python从0到100(六):Python分支和循环结构的应用
[重学Python]Day 2 Python经典案例简单习题6个
项目链接:https://github.com/jackfrued/Python-100-Days
李鹏华
2024/04/15
1590
使用Python模拟社会财富分配问题,得出了几个有趣的结论
房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?
活用数据
2022/04/02
8740
使用Python模拟社会财富分配问题,得出了几个有趣的结论
这真的是初三教科书里的概率题么?
将36个球放入标有 1,2,...,12 这 12个号码的 12 个盒子中,然后掷两枚质地均匀的骰子,掷得的点数之和是几,就从几号盒子中摸出一个球。为了尽快将球模完,你觉得应该怎样放球?
窗户
2018/12/12
1.1K0
这真的是初三教科书里的概率题么?
剑指offer【60~68】
动态规划。令 dp[n][6*n],其中 dp[i][j] 表示前 i 个骰子产生点数 j 的次数。则 dp[-1][1...6*n] 就是每一种点数的次数。点数的总次数为 6^n,然后再求概率即可。状态转移方程很好找:dp[i][j] += dp[i-1][j-k],其中 k 为点数 1~6。时间复杂度为 O(n*(6*n)*6),空间复杂度为 O(n*(6*n))。
echobingo
2019/12/20
3800
python数据库编程。
http://www.makeru.com.cn/live/5020_2051.html?s=165154 Python数据库编程 连接数据库764261140 创建连接时,就指定: pymysq
7537367
2020/08/06
6670
C++ 不知算法系列之深入动态规划算法思想
前面写过一篇博文,介绍了什么是动态规划算法。动态规划算法的最大特点,原始问题可以通过分解成规模更小的子问题来解决,子问题之间互成依赖关系,也就是先计算出来的子问题的结果会影响到后续子问题的结果。
一枚大果壳
2022/12/20
5020
C++ 不知算法系列之深入动态规划算法思想
AI 技术讲座精选:条件概率和贝叶斯定理简介
前 言 数据科学专家必须了解概率方面的知识。通常情况下,解决许多数据科学难题的办法与概率的本质息息相关。因此,更好地理解概率能够帮助你更有效率地理解并实现与之相关的算法。 在本文中,我将会重点讲解条件概率。对于概率知识的初学者,我强烈建议你们,在深入学习概率知识之前阅读一下这篇文章: https://www.analyticsvidhya.com/blog/2017/02/basic-probability-data-science-with-examples/。 预测模型很容易就可以被我们用条件概率的方式
AI科技大本营
2018/04/26
9591
AI 技术讲座精选:条件概率和贝叶斯定理简介
Python回顾与整理3:数字
数字用的次数是否多主要是看需求,如果是做自动化运维平台开发,比如做一个自动监控的系统,那么你肯定需要收集一定量的数据,然后再对这些数据做一定的处理,那么这时候,你就一定需要用得上数字的。当然,我这里所说的要不要用数字,指的是,你是否需要对你的数据做一定的处理。
py3study
2020/01/03
1.3K0
Python语言练习
Python程序由指令组成,运行程序时,计算机依据预设好的指令执行程序。 print是最简单,但很常用的指令,它用于将一些信息输出至屏幕上。 下面演示Python中的print指令:
荣仔_最靓的仔
2021/02/02
3.1K0
Python语言练习
[Python] 人生重开模拟器
在游戏开始时会选择天赋,并且在用属性点对初始属性进行加点,每一步操作都可能决定在这一生中的命运如何,具体游戏页面如下:
DevKevin
2024/03/19
2380
[Python] 人生重开模拟器
概率入门:双色球中奖、购车摇号中签和德扑同花顺,哪个更容易?
导读:排列组合是我们在这本书中接触到的第一个概率论概念,也是我们在高中学过的一个概率学的入门概念。概念记不清了也不要紧,我们回忆一下在中学学过的排列组合都有哪些经典问题来的。
IT阅读排行榜
2018/09/29
1.6K0
概率入门:双色球中奖、购车摇号中签和德扑同花顺,哪个更容易?
日拱一卒,伯克利Python入门项目,手把手教你写个简单ai
咱们继续来聊聊伯克利的CS61A,这次分享的是这门课的第一个project。虽然说是project,但其实代码量不大。难度也不高,需要了解一点Python的基础语法和基本的函数式编程的思想。如果对于函数式编程还不太熟悉的,可以去历史记录里回看一下上一篇文章。
TechFlow-承志
2022/08/26
7380
日拱一卒,伯克利Python入门项目,手把手教你写个简单ai
仓位管理:超越凯利公式,梦回华尔街!
举个简单的例子,如果你有1万元资金,投资时间为5年,年化收益率为10%。五年后,你一共能拿回多少呢?按照上面的公式,结果就是:
量化投资与机器学习微信公众号
2019/08/20
1.9K0
python——循环(for循环、while循环)及练习
“”" for 变量 in range(10): 循环需要执行的代码 else: 循环结束时,需要执行的代码 “”"
用户7886150
2021/01/22
6.2K0
最大期望算法EM,极大似然函数
最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。
大数据技术与机器学习
2019/11/20
2.3K0
从似然函数到EM算法(附代码实现)
最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。
mantch
2019/07/30
7610
相关推荐
逢赌必赢的秘密
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验