用python-plotly模拟掷骰子类的随机过程
作者:互联网
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