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

作者:PursuitingPeak 时间:2021-07-02 06:54:54 

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

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={&rsquo;1&lsquo;:'150000',&rsquo;2&lsquo;:'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个数据图形(为展示较全,原图已缩小):

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

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)

来源:https://www.cnblogs.com/codingchen/p/16192714.html

标签:Python,随机函数,变化,图形
0
投稿

猜你喜欢

  • 利用Go语言快速实现一个极简任务调度系统

    2023-08-28 14:26:15
  • 详细介绍查询优化技术在现实系统中的运用

    2009-01-04 13:34:00
  • 基本的页面设计元素布局比例

    2007-12-15 09:43:00
  • Python使用turtle库绘制小猪佩奇(实例代码)

    2021-09-21 08:45:30
  • 全面剖析Python的Django框架中的项目部署技巧第1/2页

    2021-09-24 23:46:58
  • 在Python反编译中批量pyc转 py的实现代码

    2023-08-11 20:21:04
  • 如何实现SQL Server的分页显示?

    2010-05-18 18:36:00
  • javascript 模拟函数指针

    2009-09-19 18:02:00
  • Python selenium 三种等待方式详解(必会)

    2021-03-13 16:03:33
  • Oracle数据库逻辑备份的SH文件

    2010-07-27 13:26:00
  • python+selenium实现简历自动刷新的示例代码

    2023-11-27 16:13:01
  • Python登录注册验证功能实现

    2022-10-17 04:53:00
  • SQL Server中如何快速获取表的记录总数

    2008-12-05 15:59:00
  • 详解Python中for循环的使用

    2023-06-13 13:55:40
  • 微信小程序之多文件下载的简单封装示例

    2023-10-19 21:10:06
  • ASP读取日期单日期自动补零函数代码

    2011-02-20 10:39:00
  • js关于 byval 与 byref 的区别

    2007-10-13 10:48:00
  • 关于JSON以及JSON在PHP中的应用技巧

    2023-11-16 00:03:38
  • ASP生成XML文件

    2009-06-29 16:28:00
  • Oracle开发之报表函数

    2023-07-23 16:29:00
  • asp之家 网络编程 m.aspxhome.com