Python利用随机函数生成变化图形详解

鉴于上一篇中最后三个问题:

1、上述程序是否能进行优化(比如功能相同的)

2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机,(n比较大时,num_times应该比较小)

3、当实现上述功能后,程序运行,只输入一个参数(创建实例的个数),就会自动生成对应的num_times,并分别调用相关函数生成对应图表。

可以,在类Rand_moving()中计算每一步的方向和移动位置时,都用到了一个乘法公式,

x_direction = choice([1,-1])       #x的移动方向,1向上,0不变,-1向下
            x_distance = choice([0,1,2,3,4,5]) #x的每次移动的像素,
            x_step = x_direction*x_distance    #移动方向乘以移动距离,以确定沿x移动的距离

            y_direction =  choice([1,-1])      #y的移动方向,1向上,0不变,-1向下
            y_distance = choice([0,1,2,3,4,5]) #y的每次移动的像素,
            y_step = y_direction*y_distance    #移动方向乘以移动距离,以确定沿y移动的距离

因此可以整理出一个计算方法,可以直接调用,至于2,3很明显,也是可以完成的。

第一步,将乘法公式提出来单独形成一个作用于自身的方法,代码如下:

def get_step(self,direction,distance):
          return distance*direction

    def fill_moving(self):
        while len(self.x_values)<self.num_times:#循环不断运行,直到漫步包含所需数量的点num_times
            x_step = self.get_step(choice([1,-1]),choice([0,1,2,3,4,5]))     #直接调用get_step方法,使代码更加简洁
            y_step = self.get_step(choice([1,-1]),choice([0,1,2,3,4,5]))

完成第1问,代码变得更加简洁明了。

第2、3个问题:

1)要能生成实例个数n,且还有对应的移动次数num_times,可考虑用字典,即实例个数为key,对应移动次数num_times为键值,当输入2时,如  caselist={’1‘:'150000',’2‘:'250000'}

2)读取字典每个项目,将对应的key和value传递给由Rand_moving类创建的实例,key的个数即为需要创建实例的个数,对应的value值为移动次数。

3)输入数字,即为字典key的个数,存入字典,同时利用随机函数生成一个num_times保存到对应的value中。

完成思路:

1,重新定义一个类 New_case() 作用:接收一个数据,并根据这个数据自动生成一个字典,

class New_case():
    #定义New_case类
    def __init__(self,numbers): #定义要创建的实例个数
        self.numbers=numbers
        self.caselist={}  #定义一个空的caselist字典
        self.case = 0
       while self.case < self.numbers: #当变量case小于给定值时,
            self.case += 1
            times = choice([100000,150000,200000,250000])#随机选择一个移动次数
            self.caselist[self.case] = times  #将value与key对应

2、需要循环读取字典的key和value,并将value传递给类Rand_moving,随后再运行fill_moving()生成数据并保存到列表,随即用plt.scatter()进行绘图

for key,value in self.caselist.items(): #字典不为空
            colorkey=str(key)        #  将字典关键字转为字符串存到变量colorkey中
            examplecase = Rand_moving(int(value))  #创建实例,将对应的value值传递类Rand_moving
            examplecase.fill_moving()  #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
            plt.figure(dpi=128,figsize=(12, 10))   #创建画面屏幕
            plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)
        plt.show()

上篇中的代码  c=y_values, cmap=plt.cm.Reds为什么这里不再用,是因为这里循环的时候一直出现红色Reds,为了对比,创建了一新字典colors{},将生成的个数与颜色相对应。所以上述代码中修改为 c=self.colors[colorkey]

类New_case() 全部代码如下:

import matplotlib.pyplot as plt

from rand_moving import *

class New_case():
    #定义New_case类
    def __init__(self,numbers): #定义要创建的实例个数
        self.numbers=numbers
        self.caselist={}  #定义一个空的cases列表
        self.case = 0    #定义一个case变量
        self.colors={'1':'red','2':'orange','3':'yellow','4':'green','5':'blue','6':'puple'}#创建了一新字典colors{},将生成的个数与颜色相对应

        while self.case < self.numbers:  #小于给定实例个数时
            self.case += 1
            times = choice([100000,150000,200000,250000]) #随机生成一个移动次数
            self.caselist[self.case] = times    #将变量case作为key, times作为value保存到字典中      

    def case_moving(self):  #重新定义一个方法,即访问字典所有项
        for key,value in self.caselist.items(): #字典不为空
            colorkey=str(key)        #  将字典关键字转为字符串存到变量colorkey中
            examplecase = Rand_moving(int(value))  #创建实例,将对应的value值传递类Rand_moving
            examplecase.fill_moving()  #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
            plt.figure(dpi=128,figsize=(12, 10))   #创建画面屏幕
            plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)#注意调用了上述新字典的颜色
        plt.show()

3、主程序

主程序中有一个交互,需要输入一个数据,然后调用相关相关类创建实例(慢慢成调包侠了!^v^)

import matplotlib.pyplot as plt

from rand_moving import *
from new_case import *

print("Please enter the number:")  #交互,请输入一个数,模拟运行,不需要太大的数据。
n = input()   #将输入的数据保存到变量n中,注意所有输入均为字符串,

testcase = New_case(int(n)) #将n转为整型数据,创建实例个数
testcase.case_moving()

实际运行效果,输入4,生成4个数据图形(为展示较全,原图已缩小):

self.colors={'1':'red','2':'orange','3':'yellow','4':'green','5':'blue','6':'puple'} 注意:图的颜色分别与colors字典中对应。

当然如果觉得数轴很碍眼,那就在类类New_case() 中的plt.figure()之后加上

plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False) 

到此这篇关于Python利用随机函数生成变化图形详解的文章就介绍到这了,更多相关Python随机函数生成变化图形内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python利用随机函数生成变化图形详解(一)

    目录 前言 一.rand_moving.py文件定义功能如下 二.绘图模块 小结 前言 综合前述的类.函数.matplotlib等,完成一个随机移动的过程(注意要确定移动的次数,比如10万次),每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策确定的,最后显示出每次移动的位置的图表. 思考: 1)每次走动多少个像素,由随机函数决定,每次移动方向也随机确定.由随机方向和随机像素共同移动位置大小和方向. 2)保证将每次移动的位置保存在列表中,供后面matplotlib调用,生成图表. 故

  • python中的随机函数random的用法示例

    一.random模块简介 Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等. 二.random模块重要函数 1 ).random() 返回0<=n<1之间的随机实数n: 2 ).choice(seq) 从序列seq中返回随机的元素: import random a = random.choice([1, 2, 3, 4]) print(a) 3 ).getrandbits(n) 以长整型形式返回n个随机位: 4 )

  • python之随机数函数的实现示例

    前言 这是俺写的第一篇关于python的博客,分享一下我所整合的python中的随机数函数,就当作是自己的一个笔记,也可以供像我一样的python入门新手小白参考学习.希望可以记录下自己的学习过程. 一.random() 生成一个(0,1)指定范围内的随机浮点数 运行结果如下: 二.uniform(x,y) 生成一个指定范围([min(x,y) max(x,y)])内的随机浮点数 运行结果如下: 三.randint() 生成一个指定范围([x,y])内的整数 运行结果如下: 四.randrang

  • Python随机函数random()使用方法小结

    1. random.random() random.random()方法返回一个随机数,其在0至1的范围之内,以下是其具体用法: import random print ("随机数: ", random.random()) 输出结果:0.22867521257116 2. random.uniform() random.uniform()是在指定范围内生成随机数,其有两个参数,一个是范围上限,一个是范围下线,具体用法如下: import random print (random.uni

  • python中随机函数random用法实例

    本文实例讲述了python中随机函数random用法.分享给大家供大家参考.具体如下: python中的random模块功能非常强大,可以生成各种随机值 #! python # random import random print random.choice(['apple', 'pear', 'banana']) #从数组中随机选择一个元素 print random.sample(xrange(100), 10) # sampling without replacement print ran

  • Python利用随机函数生成变化图形详解

    鉴于上一篇中最后三个问题: 1.上述程序是否能进行优化(比如功能相同的) 2.创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的num_times随机,(n比较大时,num_times应该比较小) 3.当实现上述功能后,程序运行,只输入一个参数(创建实例的个数),就会自动生成对应的num_times,并分别调用相关函数生成对应图表. 可以,在类Rand_moving()中计算每一步的方向和移动位置时,都用到了一个乘法公式, x_direction

  • Android Flutter利用CustomPaint绘制基本图形详解

    目录 绘制矩形 绘制圆形 绘制椭圆 绘制任意形状 绘制弧形 总结 上一篇我们介绍了 CustomPaint 的基本概念和使用,可以看到 CustomPaint 其实和 前端的 Canvas基本上是一样的,实际上前端 Canvas 支持的绘制方法 CustomPaint 都支持,毕竟 CustomPaint 其实也是基于 Canvas 实现的.本篇我们来介绍 CustomPaint 基本图形的绘制. 绘制矩形 绘制矩形比较简单,方法定义如下: void drawRect(Rect rect, Pa

  • 通过python实现随机交换礼物程序详解

    看到了一个面试题,想了两种解法,不知道符不符合要求,记录如下: 题目:有N个人,每人备一个圣诞礼物,现需要写一个程序,随机交互礼物,要求:自己不能换到自己的礼物,用python实现. 方法一: 构造二维列表存储参与者的名字和所带礼物,使用random.choice()随机选择礼物. import random lsGiftIn = [['Jack','apple'],['June','ball'],['Mary','card'],['Duke','doll'],['James','egg'],[

  • Python利用Beautiful Soup模块创建对象详解

    安装 通过 pip 安装 Beautiful Soup 模块:pip install beautifulsoup4 . 还可以使用 PyCharm IDE 来写代码,在 PyCharm 中的 Preferences 中找到 Project ,在里面搜索 Beautiful Soup 模块,进行安装即可. 创建 BeautifulSoup 对象 Beautiful Soup 模块广泛使用从网页中得到数据.我们能够使用 Beautiful Soup 模块从 HTML/XML 文档中提取任何数据,例如

  • Python决策树和随机森林算法实例详解

    本文实例讲述了Python决策树和随机森林算法.分享给大家供大家参考,具体如下: 决策树和随机森林都是常用的分类算法,它们的判断逻辑和人的思维方式非常类似,人们常常在遇到多个条件组合问题的时候,也通常可以画出一颗决策树来帮助决策判断.本文简要介绍了决策树和随机森林的算法以及实现,并使用随机森林算法和决策树算法来检测FTP暴力破解和POP3暴力破解,详细代码可以参考: https://github.com/traviszeng/MLWithWebSecurity 决策树算法 决策树表现了对象属性和

  • 利用Python创建位置生成器的示例详解

    目录 介绍 开始 步骤 创建训练数据集 创建测试数据集 将合成图像转换回坐标 放在一起 结论 介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网络(GAN)模型. 然后,我们可以通过为包括东京在内的世界各地城市创建合成数据集来测试该模型的学习和概括能力. git clone https://github.com/gretelai/GAN-location-generator.git 在之前的一篇博客中,我们根据电子自行车订阅源中的精确位置数

  • python时间日期函数与利用pandas进行时间序列处理详解

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差. 下面我们先简单的了解下python日期和时间数据类型及工具 给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象 from datetime import datetime from datetime impo

  • 详解Python中生成随机数据的示例详解

    目录 随机性有多随机 加密安全性 PRNG random 模块 数组 numpy.random 相关数据的生成 random模块与NumPy对照表 CSPRNG 尽可能随机 os.urandom() secrets 最佳保存方式 UUID 工程随机性的比较 在日常工作编程中存在着各种随机事件,同样在编程中生成随机数字的时候也是一样,随机有多随机呢?在涉及信息安全的情况下,它是最重要的问题之一.每当在 Python 中生成随机数据.字符串或数字时,最好至少大致了解这些数据是如何生成的. 用于在 P

  • 利用Python自动生成PPT的示例详解

    在日常工作中,PPT制作是常见的工作,如果制作创意类PPT,则无法通过自动化的形式生成,因为创意本身具有随机性,而自动化解决的是重复性工作,两者有所冲突. python-pptx是python处理PPT的一个库,注重的是读和写,无法导出,没有渲染功能. 废话不多说,第一步,安装python-pptx库: pip3 install -i https://pypi.doubanio.com/simple/ python-pptx ppt里面处理的主要对象一般为文本框,表格,图片. 每一页的ppt为一

随机推荐