美文网首页
python编程:从入门到实践 第15章练习

python编程:从入门到实践 第15章练习

作者: 梦vctor | 来源:发表于2018-09-26 15:51 被阅读0次
image.png
#15-1
#1
 x_values=[1,2,3,4,5]
 y_values=[1,8,27,64,125]
 plt.scatter(x_values,y_values,s=100)
 plt.title("Square Numbers",fontsize=24)    #title()给图标指定标题,fontsize指定了图标中文字的大小
 plt.xlabel("Value",fontsize=14)    #为每条轴设置标题
 plt.ylabel("Square of Value",fontsize=14)
 plt.show()

#2
x_values=list(range(1,5001))
y_values=[x**3 for x in x_values]
plt.scatter(x_values,y_values,s=40)

plt.title("Square Numbers",fontsize=24) #title()给图标指定标题,fontsize指定了图标中文字的大小
plt.xlabel("Value",fontsize=14) #为每条轴设置标题
plt.ylabel("Square of Value",fontsize=14)
plt.axis([0,5010,0,125000000000])#设置每个坐标轴的范围
plt.show()
image.png
#15-2
x_values=list(range(1,5001))
y_values=[x**3 for x in x_values]
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Reds,s=40)

plt.title("Square Numbers",fontsize=24) #title()给图标指定标题,fontsize指定了图标中文字的大小
plt.xlabel("Value",fontsize=14) #为每条轴设置标题
plt.ylabel("Square of Value",fontsize=14)
plt.axis([0,5010,0,125000000000])#设置每个坐标轴的范围
plt.show()
image.png
#15-3
import matplotlib.pyplot as plt

from random_walk import RandomWalk

#只要程序处于活动状态,就不断地模拟随机漫步
while True:
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw=RandomWalk()
    rw.fill_walk()

    plt.plot(rw.x_values,rw.y_values,linewidth=3)
    plt.show()

    keeping_running=input("Make another walk?(y/n): ")
    if keeping_running=='n':
        break

输出:


image.png
image.png
#决定前进方向以及沿这个方向前进的距离
            x_direction=choice([1]) #要么向右走1,要么向左走的-1
            x_distance=choice([0,1,2,3,4,5,6,7,8])  #随机地选择一个0~4之间的整数,沿指定方向走多远
            x_step=x_direction*x_distance   #移动方向乘以移动距离,以确定沿x和y轴移动的距离。x_step为正,将向右移动,为负向左,为零将垂直移动

            y_direction=choice([1])
            y_distance=choice([0,1,2,3,4,5,6,7,8])
            y_step=y_direction*y_distance   #y_step为正向上,为负向下,为零水平移动。

输出:


image.png
image.png image.png
def get_step(self):
        #决定前进方向以及沿这个方向前进的距离
        self.direction=choice([1,-1])   #要么向右走1,要么向左走的-1
        self.distance=choice([0,1,2,3,4])   #随机地选择一个0~4之间的整数,沿指定方向走多远
        self.step=self.direction * self.distance    #移动方向乘以移动距离,以确定沿x和y轴移动的距离。x_step为正,将向右移动,为负向左,为零将垂直移动
        return self.step

def fill_walk(self):
        '''计算随机漫步包含的所有店'''

        #不断漫步,直到列表达到指定的长度
        while len(self.x_values)<self.num_points:   #模拟四种漫步决定:向左还是向右走?沿指定的方向走多远?向上还是向下走?沿选定的方向走多远?

            x_step=get_step(self)
            y_step=get_step(self)

            #拒绝原地踏步
            if x_step==0 and y_step==0:
                continue

输出:


image.png image.png
# hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']    #将掷骰子的结果用作x轴的标签
lists=[]
for i in range(2,13):
    lists.append(str(i))
hist.x_labels=lists
image.png
import pygal
from die import Die

#创建两个D6骰子
die_1=Die(8)
die_2=Die(8)

#掷骰子多次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
    result=die_1.roll()+die_2.roll()    #计算总点数
    results.append(result)

print(results)

#分析结果
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)

print(frequencies)

#对结果进行可视化
hist=pygal.Bar()    #创建实例

hist.title="Results of rolling two D8 1000 times."  #用于标示直方图的字符串
# hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']    #将掷骰子的结果用作x轴的标签
lists=[]
for i in range(2,17):
    lists.append(str(i))
hist.x_labels=lists

hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D8+D8',frequencies)   #用add()函数将一系列的值添加到图表中
hist.render_to_file('dice_visual.svg')  #将图表渲染为一个SVG文件

输出:


image.png
image.png
import pygal
from die import Die

#创建三个D6骰子
die_1=Die()
die_2=Die()
die_3=Die()

#掷骰子多次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
    result=die_1.roll()+die_2.roll()+die_3.roll()   #计算总点数
    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=results.count(value)
    frequencies.append(frequency)

print(frequencies)

#对结果进行可视化
hist=pygal.Bar()    #创建实例

hist.title="Results of rolling three D6 1000 times."    #用于标示直方图的字符串
# hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']    #将掷骰子的结果用作x轴的标签
lists=[]
for i in range(3,19):
    lists.append(str(i))
hist.x_labels=lists

hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D6+D6+D6',frequencies)    #用add()函数将一系列的值添加到图表中
hist.render_to_file('dice_visual.svg')  #将图表渲染为一个SVG文件

输出:


image.png
image.png
import pygal
from die import Die

#创建两个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)

#分析结果
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)

print(frequencies)

#对结果进行可视化
hist=pygal.Bar()    #创建实例

hist.title="Multiply-Results of rolling two D6 1000 times." #用于标示直方图的字符串
# hist.x_labels=['2','3','4','5','6','7','8','9','10','11','12']    #将掷骰子的结果用作x轴的标签
lists=[]
for i in range(1,37):
    lists.append(str(i))
    # lists.remove('7','11','13','14','17','19','21','22','23','26','27','28','29','31','32','33','34','35')
hist.x_labels=lists

hist.x_title="Result"   #给x轴添加标题
hist.y_title="Frequency of Result"

hist.add('D6*D6',frequencies)   #用add()函数将一系列的值添加到图表中
hist.render_to_file('dice_visual.svg')  #将图表渲染为一个SVG文件
image.png
image.png
#15-10
#1、使用matplotlib通过可视化模拟掷骰子的情况
from die import Die
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

#创建两个骰子
die_1=Die()
die_2=Die(10)

#掷骰子多次骰子,并将结果存储在一个列表中
results=[]
for roll_num in range(1000):
    result=die_1.roll()+die_2.roll()    #计算总点数
    results.append(result)

print(results)

#分析结果
frequencies=[]
max_result=die_1.num_sides+die_2.num_sides  #最大可能点数
X_Range=list(set(results))  #set无序、不可重复,list有序、可重复

for value in X_Range:
    frequency=results.count(value)
    frequencies.append(frequency)

plt.bar(X_Range,frequencies,color='Pink',align='center',label='D6+D10')
plt.xticks(X_Range)

plt.xlabel("Results",fontsize=8)
plt.ylabel("Frequencies",fontsize=8)

#图例
pink_patch=mpatches.Patch(color='Pink',label='D6+D10')
plt.legend(handles=[pink_patch])

plt.show()

输出:


image.png
#2、使用Pygal通过可视化来模拟随机漫步的情况
import pygal
from random_walk import RandomWalk

rw=RandomWalk(1000)
rw.fill_walk()

xy_chart = pygal.XY(stroke = False)  #stroke=False散点不连线
xy_chart.title = 'RandomWalk'
pygal.Line(include_x_axis = False,include_y_axis = False)

#把生成的值变成坐标
xy_list = []
for (x,y) in zip(rw.x_values,rw.y_values):
    xy_list.append((x,y))

xy_chart.add('data', xy_list)

xy_chart.render_to_file('RandomWalk.svg')

输出:


image.png

相关文章

网友评论

      本文标题:python编程:从入门到实践 第15章练习

      本文链接:https://www.haomeiwen.com/subject/eyskoftx.html