ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用python-plotly模拟掷骰子类的随机过程

2021-01-30 19:31:51  阅读:275  来源: 互联网

标签:python die 掷骰子 range num result plotly config axis


python-plotly模拟掷骰子随机过程

澳门赌场在线发牌
只要他用正确的算法
其实这真的是随机事件

其实投掷骰子这种事件是生活中常见的随机事件,这在数学领域常常用来解释各种数据类型分析,而在赌场这些场合它也常见,我们这次就用python对这些随机事件进行模拟并且通过可视化来反应最后的结果

投掷一个骰子

先单独创建一个文件die.py来存储第一个类,我们用它来产生随机数

from random import randint#引用随机模块
class Die:
    """一个骰子的数的类"""
    
    def __init__(self, num_sides=6):
        """一个骰子是六个面的,所以为6"""
        self.num_sides = num_sides
        
    def roll(self):
        """"随机在1到6间去一个数返回"""
        return randint(1, self.num_sides)

做好类后,我们再创建另一个文件,名字可以任意起。

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

#首先要把骰子调动过来
die = Die()

# 用一个列表来存储数据
results = []
for roll_num in range(1000):
#循环产生1000个数==投掷1000
    result = die.roll()
    results.append(result)#把数据放入列表
    
# 分析结果
frequencies = []#空列表来存储点数出现的个数
for value in range(1, die.num_sides+1):
#遍历可能的点数,这里的点数是1-6
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 对结果可视化
x_values = list(range(1, die.num_sides+1))
#这里要注意用list把函数range的结果转化成列表,因为plotly不能直接接受range的结果
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result'}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling one D6 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
#坐标轴是不固定的在用不同的方式配置,用类layout可以指定一个布局和配置对象
offline.plot({'data': data, 'layout': my_layout}, filename='jie_guo')
#调用一个offline.plot,这个需要一个数据和字典加文件名,文件名是保存的图像的文件名

运行程序会自动生成一个html文件,并在浏览器里面打开,这个就是我们模拟出来的结果图像
在这里插入图片描述

投掷两个骰子

如果同时投掷两个骰子,并且求他们点数总和又是怎么做呢?
我们只需要修改前面的代码就可以了

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

# 这次我们创建两个骰子
die_1 = Die()
die_2 = Die()

# 把结果记录在列表中
results = []
for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
    
# 分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
#这里求两个骰子的总和
for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 数据可视化
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')

最后模拟出来的结果是这样子的

在这里插入图片描述

同时投掷两个不同面的骰子

不如说我们投掷的骰子有一个是6面的。有一个是10面的,把它投掷到一定基数,结果会怎么样?我们还是基于上面的代码来看看

from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

#这里要特别注意下,因为是10个面了,我们输入的函数第二个就是10了
die_1 = Die()
die_2 = Die(10)

results = []
for roll_num in range(50_000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
    

frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
    
# 数据可视化
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling a D6 and a D10 50000 times',
        xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d10.html')

最后模拟出来的结果是这样子的

参考文献
python编程从入门到实践–埃里克.马瑟斯

标签:python,die,掷骰子,range,num,result,plotly,config,axis
来源: https://blog.csdn.net/weixin_47567401/article/details/113444649

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有