python--模拟掷骰子游戏

通过python模拟掷骰子的游戏

题目是:

双骰子赌博游戏玩法如下。玩家投掷两个骰子,如果点数和是7或者11,那么该玩家胜,计算玩1000次后玩家胜的概率。

模拟1000次之后,输出结果并绘制直方图显示计算各点数的分布。
由于每次掷骰子结果都是随机的,所以最终显示的概率每次运行程序都不同。

python 代码如下所示:

# -*- coding: utf-8 -*-
"""
Created on %(date)s

@author: %(jixianpu)s

Email : 211311040008@hhu.edu.cn

introduction : keep learning althongh walk slowly
"""


import numpy as np
import matplotlib.pyplot as plt
import random


############################################################################################
###########   定义函数,模拟掷骰子的功能,每次结果都不一样,结果是随机的
############################################################################################
def roll_dice():
    # 模拟掷骰子
    roll = random.randint(1, 6)
    return roll


############################################################################################
###########   建议一个二维空数组,第一维度100为模拟次数,
###########   第二维度分布表示:相加之和不是7和11的结果;相加之和是7和11的结果;所有两次相加的结果
############################################################################################
# 记录骰子的结果
def main():
    

    num = 1000
    
    roll_list = np.zeros((num,3))
    
    for i in range(num):
        # print(i)
        
        roll1 = roll_dice()
        roll2 = roll_dice()
    
        x = roll1+roll2
        roll_list[i,2]=x
        if (x==7)| (x==11):
            roll_list[i,1] = x
            print('you win'+'point='+str(x))
            # break
        else:
            roll_list[i,0] = x
            print('you lose'+'point='+str(x))
    ############################################################################################
    ###########   calculation the frequency
    ############################################################################################   
    fre1 = len(roll_list[:,1][roll_list[:,1]==7])
    fre2 = len(roll_list[:,1][roll_list[:,1]==11])
    frequency = (fre1+fre2)/len(range(num))
    # 
    # result = roll_list[:,2]
    
    # idx = np.where((result==7)|(result==11))[0]
    # res_2 = idx[0:2]
    # data  = result[0:(res_2[1]+1)]
    # frequency2 = 2/len(data)
    # print('赢两次的概率为'+str(frequency2))
    ############################################################################################
    ###########   plot the result of game
    ############################################################################################
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False        
    
    plt.figure(dpi=200)
    plt.hist(roll_list[:,2], bins=range(2, 14), edgecolor='black', linewidth=1, rwidth=0.8)
    
        # 设置X轴坐标点
    tick_labels = ['2点', '3点', '4点', '5点', '6点', '7点', '8点', '9点', '10点', '11点', '12点']
    tick_pos = np.arange(2, 13)+0.5
    plt.xticks(tick_pos, tick_labels)
    
    plt.title(str(num)+'次掷骰子(2个)结果win的概率为:'+str(frequency))
    plt.xlabel('点数')
    plt.ylabel('频率')
    plt.show()

if __name__ == '__main__':
    main()


绘图结果如下图所示:
在这里插入图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值