用python-plotly模拟掷骰子类的随机过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用python-plotly模拟掷骰子类的随机过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3756字,纯文字阅读大概需要6分钟。
内容图文
![用python-plotly模拟掷骰子类的随机过程](/upload/InfoBanner/zyjiaocheng/608/941c7e248cf64be2a3f58cd065cbb716.jpg)
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-plotly模拟掷骰子类的随机过程全部内容,希望文章能够帮你解决用python-plotly模拟掷骰子类的随机过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。