【Python编程:从入门到实践】第十五章练习题

15-10  练习使用本章介绍的两个库 :尝试使用 matplotlib 通过可视化来模拟掷骰子的情况,并尝试使用 Pygal 通过可视化来模拟随机漫步的情况。

使用 matplotlib 通过可视化来模拟掷骰子的情况,效果如下图:

代码:

die.py(表示一个骰子的类)。

默认6个面(num_sides=6),可任意修改这个数字;方法roll用来生成一个任意数。

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)

die_mpl.py(生成图表)。

函数“autolabel”用来生成柱形上面的数字,plt.text前两个为数字的坐标,第三个为要显示的数字值(字符串)。

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from die import Die

# 显示柱形上面的数字
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2 - 0.2, height + 1, '%s' % int(height))

# 创建一个D6和D10
die6 = Die()
die10 = Die(10)

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

# 标题
plt.title('Die Mpl', pad=10.0, fontsize=24)
# 图例
plt.legend(handles=[mpatches.Patch(color='#d93d0b', label='D6+D10')])
autolabel(plt.bar(range(len(frequencies)), frequencies, color='#d93d0b', tick_label=name_list))
# plt.bar(range(len(frequencies)), frequencies, tick_label=name_list)
plt.show()

使用 Pygal 通过可视化来模拟随机漫步的情况,效果如下图:

代码:

random_walk.py(生成随机的x, y点)

from random import choice

class RandomWalk():
	""" 一个生成随机漫步数据的类 """
	def __init__(self, num_points=5000):
		""" 初始化随机漫步的属性 """
		self.num_points = num_points
		#  所有随机漫步都始于 (0, 0)
		self.x_values = [0]
		self.y_values = [0]

	def fill_walk(self):
		""" 计算随机漫步包含的所有点 """
		#  不断漫步,直到列表达到指定的长度
		while len(self.x_values) < self.num_points:
			x_step = self.get_step()
			y_step = self.get_step()
			#  拒绝原地踏步
			if x_step == 0 and y_step == 0:
				continue
			#  计算下一个点的 x 和 y 值
			next_x = self.x_values[-1] + x_step
			next_y = self.y_values[-1] + y_step
			self.x_values.append(next_x)
			self.y_values.append(next_y)
	def get_step(self):
		"""决定前进方向以及沿这个方向前进的距离"""
		direction = choice([1, -1])
		distance = choice([0, 1, 2, 3, 4])
		step = direction * distance
		return step

rw_visual_pygal.py(生成svg文件)。

利用for (x, y) in zip(rw.x_values, rw.y_values)生成元组列表。

import pygal
from random_walk import RandomWalk

#  创建一个 RandomWalk 实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()

# 生成坐标列表
coordinate = []
for (x, y) in zip(rw.x_values, rw.y_values):
	coordinate.append((x, y))

xy_chart = pygal.XY(stroke=False)
xy_chart.title = 'RandomWalk'
xy_chart.add('RandomWalk', coordinate)
xy_chart.render()
# 生成svg文件
xy_chart.render_to_file('file/RandomWalk_pygal.svg')

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很好的问题!《Python编程入门实践》是一本非常好的Python编程入门书籍,它提供了许多有趣的习题,可以帮助读者巩固所学的知识并提高编程能力。 这些习题涵盖了Python编程的各个方面,包括基本语法、函数、类、文件操作、Web开发等等。通过完成这些习题,读者可以逐步掌握Python编程的核心概念和技能,并且能够应用这些知识来解决实际问题。 如果你正在学习《Python编程入门实践》,我建议你认真完成每个节的习题,并且尝试自己编写一些类似的程序。此外,你还可以参考一些其他的Python编程练习题,例如LeetCode、Codewars等网站上的题目,来进一步提高自己的编程能力。 ### 回答2: 《Python编程入门实践》是一本非常优秀的Python入门教材,其习题设计也是非常合理和有挑战性的。这些习题不仅具备良好的逻辑链条和难度递进,而且还让我们真正理解了Python编程的精髓,加深了对Python语言的理解和运用。 针对《Python编程入门实践》的习题,在学习过程中,我们可以从以下几个方面进行思考和总结: 首先,我们需要认真阅读题目,并按照题目要求进行分析和思考。在解决问题的过程中,我们应该养成良好的习惯,将问题分解为多个小问题,并一步一步的解决它们,而不是一次性的解决大问题。 其次,我们需要运用所学知识进行编程。我们应该熟练掌握Python的语法和各种库函数的使用,并能够独立设计和编写Python程序。 除此之外,我们还需要注重细节和思考的深度,通过自己的思考和探索,深入理解Python编程的本质和特点,并能够灵活运用到实际问题中。 最后,我们还需要进行代码的优化和重构,使其更加简洁高效。同时,我们也要注重代码的可读性和重用性,尽量使用函数封装和模块化的方式来进行编程。 在学习过程中,我们也可以参考一些其他优秀的 Python 教材和相关网站,不断学习和探索,提高自己的学习效率和编程水平。 总之,通过对《Python编程入门实践》的习题的认真学习和练习,我们可以不断巩固和提高自己的 Python 编程能力,并为将来的工作和学习打下坚实的基础。 ### 回答3: 《Python编程入门实践》是一本非常好的Python入门教程。针对各个节后面的习题,这些习题都很典型,旨在让读者将节中所学到的内容应用到实践中,并进一步加深对Python编程语言的理解。 这些习题既有简单的,也有较为困难的。比如,在第二后面的习题中,有一个要求用Python输出自己的名字、年龄和所在城市的程序,这个练习是比较简单的,可以通过以下代码来实现: name = "张三" age = 20 city = "北京" print("我的名字是%s,今年%d岁,我来自%s。" % (name, age, city)) 再比如,在第六的练习中,要求编写一个Python程序,让用户输入一些数字,然后计算它们的和。这个练习稍微有点难度,可用如下程序实现: nums = input("请输入一些数字,用逗号隔开:") # 读入输入的数字 num_list = nums.split(",") # 将输入的数字按逗号分隔开,并存储到列表中 sum = 0 # 定义变量sum,用于计算输入数字的总和 for i in num_list: # 遍历列表中的每个元素 sum += int(i) # 将每个元素转换为整型并累加到sum中 print("输入数字的总和是:%d" % sum) 当然,这些习题还有很多其他的变式,具体要看读者的深度理解和编程能力。总结来说,Python编程入门实践的课后习题是非常有价值的,读者可以通过完成这些练习来巩固所学到的知识点,同时也可以提升自己的编程能力和思维能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值