模拟掷骰子
创建一个骰子类
from random import randint
class Die():
"""表示一个骰子的类"""
#num_sides表示骰子的面数,默认为6面
def __init__(self, num_sides=6):
"""骰子默认为6面"""
self.num_sides = num_sides
def roll(self):
"""返回一个1和骰子面数之间的随机值"""
return randint(1, self.num_sides)
###################骰子工具#################
from random import randint
class Die():
"""表示一个骰子的类"""
def __init__(self, num_sides=6):
"""骰子默认为6面"""
self.num_sides = num_sides
def roll(self):
"""返回一个1和骰子面数之间的随机值"""
return randint(1, self.num_sides)
######################图形化界面展示###################
import pygal
from die_visual import action
frequencies = action()
# 创建一个条形图
hist = pygal.Bar()
hist._title = "Result of rolling one D6 1000 times"
# 很坐标表示骰子的每面
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist._x_title = "Result"
hist.y_labels = "Frequency of Result"
# 将数据赋值到具体的条形图
hist.add('D', frequencies)
hist.render_to_file("die_visual.svg")
界面展示
同时掷两个骰子
from die import Die
# 生成数据
def action():
# 创建两个D6骰子
die_1 = Die()
die_2 = Die()
# 掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(1000):
result = die_1.roll()+die_2.roll()
results.append(result)
print(results)
return get_count_each_side(die_1, die_2,results)
# 分析结果
def get_count_each_side(die_1,die_2, results):
frequencies = []
max_num = die_1.num_sides+die_2.num_sides
# range()方法是左闭右开的函数
# 取值范围为(最小值+最小值,最大值+最大值)
for value in range(2, max_num + 1):
# 统计每个点出现的次数
frequency = results.count(value)
# 将每个点出现的次数放入到列表中
frequencies.append(frequency)
print(frequencies)
return frequencies
action()
##############数据展示
from die_visual import action
frequencies = action()
# 创建一个条形图
x_names = []
hist = pygal.Bar()
hist.title = "Result of rolling one D6 1000 times"
# 横坐标表示骰子的每面
#使用range()生成一个list
x_names = list(range(2,13))
#hist.x_labels = ['1', '2', '3', '4', '5', '6','7','8','9','10','11','12']
hist.x_labels = x_names
hist.x_title = "Result"
hist.y_labels = "Frequency of Result"
# 将数据赋值到具体的条形图
hist.add('D6 + D6', frequencies)
hist.render_to_file("die_visual.svg")
扫描二维码关注公众号,回复:
9493860 查看本文章
掷两个不同点数的骰子
# 创建两个不同点数的骰子 die_1 = Die() die_2 = Die(10)