Python入门:使用Pygal模拟掷骰子

来源:《Python编程:从入门到实践》

目录

1、安装Pygal

2、Pygal画廊

3、创建Die类

4、掷骰子

5、分析结果

 6、绘制直方图

7、同时掷两个骰子 

8、同时掷两个面数不同的骰子


1、安装Pygal

python -m pip install --user pygal

2、Pygal画廊

http://www.pygal.org/, >Documentation,>Chart types。

查看图表

3、创建Die类

die.py

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)

方法roll() 使用函数randint() 来返回一个1和面数之间的随机数

4、掷骰子

die_visual.py

from die import Die

# 创建一个D6
die = Die()

# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(100):
	result = die.roll()
	results.append(result)
	
print(results)

5、分析结果

计算每个点数出现的频率

die_visual.py

from die import Die

# 创建一个D6
die = Die()

# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(1000):
	result = die.roll()
	results.append(result)
	
# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
	frequency = results.count(value)
	frequencies.append(frequency)
	
print(frequencies)

 得到每个点数出现的频率 

 6、绘制直方图

根据频率列表,绘制表示结果的直方图

die_visual.py

from die import Die
import pygal

# 创建一个D6
die = Die()

# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(1000):
	result = die.roll()
	results.append(result)
	
# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
	frequency = results.count(value)
	frequencies.append(frequency)
	
# 对结果进行可视化
hist = pygal.Bar()

hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

 为创建条形图, 创建了一个pygal.Bar() 实例, 并将其存储在hist 中

将这个图表渲染为一个SVG文件, 这种文件的扩展名必须为.svg。

7、同时掷两个骰子 

创建两个D6骰子,并将两个骰子的点数相加,把结果存在results中

dice_visual.py

from die import Die
import pygal

# 创建一个D6
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(1, max_result+1):
	frequency = results.count(value)
	frequencies.append(frequency)
	
# 对结果进行可视化
hist = pygal.Bar()

hist.title = "Results of rolling two D6 1000 times."
hist.x_labels = ['1','2','3','4','5','6','7','8','9','10','11','12']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6 + D6', frequencies)
hist.render_to_file('dice_visual.svg')

8、同时掷两个面数不同的骰子

创建一个6面骰子和一个10面骰子,同时掷这两个骰子50,000次

different_dice.py

from die import Die
import pygal

# 创建一个D6和一个D10
die_1 = Die()
die_2 = Die(10)

# 掷几次骰子, 并将结果存储在一个列表中
results = []
for roll_num in range(5000):
	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(1, max_result+1):
	frequency = results.count(value)
	frequencies.append(frequency)
	
# 对结果进行可视化
hist = pygal.Bar()

hist.title = "Results of rolling two D6 1000 times."
hist.x_labels = ['1','2','3','4','5','6','7','8','9','10',
					'11','12','13','14','15','16']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6 + D6', frequencies)
hist.render_to_file('different_dice.svg')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值