《Python编程从⼊门到实践第⼆版》第⼗五章练习
15-1 ⽴⽅ 数的三次⽅称为⽴⽅ 。请绘制⼀个图形,显⽰前5个整数的⽴⽅值。再绘制⼀个图形,显⽰前5000个整数的⽴⽅值。import matplotlib.pyplot as plt
x_values =range(1,5001)
y_values =[x**3for x in x_values]
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(x_values,y_values,s=50)
# 设置图表标题并给坐标轴加上标签
ax.set_title("⽴⽅数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的⽴⽅",fontsize=14)
#设置刻度标记的⼤⼩
ax.tick_params(axis='both',which='major',labelsize=14)
# 结果显⽰
plt.show()
15-2 彩⾊⽴⽅ 给前⾯绘制的⽴⽅图指定颜⾊映射。
import matplotlib.pyplot as plt
x_values =range(1,5001)
y_values =[x**3for x in x_values]
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(x_values,y_values,c=y_values,Greens,s=50)
# 设置图表标题并给坐标轴加上标签
ax.set_title("⽴⽅数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的⽴⽅",fontsize=14)
#设置刻度标记的⼤⼩
ax.tick_params(axis='both',which='major',labelsize=14)
# 结果显⽰
plt.show()
15-3 分⼦运动 修改rw_visual.py,将其中的ax.scatter() 替换为ax.plot() 。为模拟花粉在⽔滴表⾯的运动路径,向plt.plot() 传递rw.x_values 和rw.y_values,并指定实参linewidth 。请使⽤5000个点⽽不是50 000个点。
import matplotlib.pyplot as plt
from random_walk import RandomWalk
while True:
# 创建⼀个RandomWalk实例
rw = RandomWalk(5000)
rw.fill_walk()
# 将所有的点都绘制出来
plt.style.use('classic')
fig,ax = plt.subplots()
plt.plot(rw.x_values,rw.y_values,linewidth=5)js获取session中的值
plt.show()
keep_running =input("Make another walk?(y/n): ")
if keep_running =='n':
break
15-4 改进的随机漫步 在类RandomWalk 中,x_step和y_step 是根据相同的条件⽣成的:从列表[1, -1] 中随机选择⽅向,并从列表[0, 1, 2, 3, 4] 中随机选择距离。请修改这些列表中的值,看看对随机漫步路径有何影响。尝试使⽤更长的距离选择列表(如0~8),或者将-1从 或 ⽅向列表中删除。
(以下代码不确定对不对)
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_direction = choice.random([1,-1])
x_distance = choice.random([0,1,2,3,4])
x_step = x_direction * x_distance
y_direction = choice.random([1,-1])
y_distance = choice.random([0,1,2,3,4])
y_step = y_direction * y_distance
# 拒绝原地踏步
if x_step ==0and y_step ==0:
continue
# 计算下⼀个点的x值和y值
x = self.x_values[-1]+ x_step
y = self.y_values[-1]+ y_step
self.x_values.append(x)
self.y_values.append(y)
15-5 重构 ⽅法fill_walk() 很长。请新建⼀个名为get_step() 的⽅法,⽤于确定每次漫步的距离和⽅向,并计算每⼀步。然后,在
fill_walk() 中调⽤get_step() 两次:
error404sans帅气图片x_step = _step()
y_step = _step()
通过这样的重构,可缩⼩⽅法fill_walk() ,让它阅读和理解起来更容易。
from random import choice
class RandomWalk():
"""docstring for RandomWalk"""
def__init__(self, num_points=5000):
self.num_points = num_points
self.x_values =[0]
self.y_values =[0]
def fill_walk(self):
while len(self.x_values)< self.num_points:
x_step = _step()
y_step = _step()
if x_step ==0and y_step ==0:
continue
x_next = self.x_values[-1]+ x_step
y_next = self.y_values[-1]+ y_step
self.x_values.append(x_next)
self.y_values.append(y_next)
def get_step(self):
# 决定前进⽅向以及沿这个⽅向前进的距离
x_direction = choice([1,-1])
x_distance = choice([0,1,2,3,4,5,6,7,8,])
x_step = x_direction * x_distance
y_direction = choice([1,-1])
y_distance = choice([0,1,2,3,4,5,6,7,8])
y_step = y_direction * y_distance
return step
15-6:两个D8 编写⼀个程序,模拟同时掷两个8⾯骰⼦1000次的结果。先想象⼀下结果会是什么样的,再运⾏这个程序,看看你的直觉准不准。逐渐增加掷骰⼦的次数,直到系统不堪重负为⽌。
die.py
from random import randint
class Die:
"""表⽰⼀个骰⼦的类"""
def__init__(self,num_sides=8):
self.num_sides = num_sides
def roll(self):
return randint(1,self.num_sides)
15.6.py
aph_objs import Bar,Layout
from plotly import offline
from die import Die
# 创建两个D8
学python编程入门die_1 = Die()
die_2 = Die()
# 掷1000次骰⼦并将结果存储在⼀个列表中
results =[]
for roll_num in range(1000):
result = ll()+ ll()
results.append(result)
print(results)
数据库字段类型 decimal是什么类型15-7:同时掷三个骰⼦ 同时掷三个D6时,可能得到的最⼩点数为3,最⼤点数为18。请通过可视化展⽰同时掷三个D6的结果。die.py
from random import randint
class Die:
"""表⽰⼀个骰⼦的类"""
def__init__(self,num_sides=6):
self.num_sides = num_sides
def roll(self):
return randint(1,self.num_sides)
15.7.py
rtmp网页视频播放器aph_objs import Bar,Layout
from plotly import offline
from die import Die
# 创建三个D6
die_1 = Die()
die_2 = Die()
die_3 = Die()
# 掷⼏次骰⼦并将结果存储在⼀个列表中
results =[]
for roll_num in range(1000):
result = ll()+ ll()+ ll()
results.append(result)
# print(results)
# 分析结果
frequencies =[]
max_result = die_1.num_sides + die_2.num_sides + die_3.num_sides
for value in range(3,max_result+1):
frequency = unt(value)
frequencies.append(frequency)
# 可视化结果
x_values =list(range(3,max_result+1))
编程教程图解data =[Bar(x=x_values,y=frequencies)]
# 设置'dtick': 1让Plotly显⽰每个刻度值
x_axis_config ={'title':'结果','dtick':1}
y_axis_config ={'title':'结果频率'}
my_layout = Layout(title='掷3个D6 1000次的结果',xaxis=x_axis_config,yaxis=y_axis_config)
offline.plot({'data':data,'layout':my_layout},filename='15_7.html')
结果:
15-8:将点数相乘 同时掷两个骰⼦时,通常将其点数相加。请通过可视化展⽰将两个骰⼦的点数相乘的结果。die.py
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论