ITPub博客

首页 > 数据库 > 数据库开发技术 > 赌场游戏——幸运7真的幸运吗?(Python模拟仿真)

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

原创 数据库开发技术 作者:阿黎逸阳的代码 时间:2021-04-05 07:00:00 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,具体语句如下:

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,则计数加1print('10万次抛掷中,两枚筛子抛掷数值之和为7的概率为:', count/100000*100,'%')#输出打印结果

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

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万轮)此游戏后玩家能处于赢钱的状态?具体语句如下:

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

###############################如果点数之和为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
###############################如果点数之和为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
###############################如果点数之和为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

###############################如果点数之和为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

###############################如果点数之和为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万轮)后玩家处于赢钱的状态。

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

往期回顾:

情人节表白烟花

520表白代码合集
黑客帝国中的代码雨
用python绘制皮卡丘
娱乐圈排行榜动态条形图绘制
Python人脸识别—我的眼里只有你
3D星空图V2版——添加背景图片和音乐


扫一扫关注我

13162366985

投稿微信号、手机号

原文作者:阿黎逸阳的代码;如有侵权,请联系管理员删除。

下一篇: 最后一眼
请登录后发表评论 登录
全部评论

注册时间:2020-02-15

  • 博文量
    282
  • 访问量
    130908