美文网首页
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