我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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随机函数生成变化图形内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python怎么利用随机函数生成变化图形

这篇文章主要介绍“Python怎么利用随机函数生成变化图形”,在日常操作中,相信很多人在Python怎么利用随机函数生成变化图形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么利用随机函数生成变
2023-06-30

Python利用随机函数生成变化图形的方法

这篇“Python利用随机函数生成变化图形的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python利用随机函数生成变
2023-06-30

python生成随机图形验证码详解

使用python生成随机图片验证码,需要使用pillow模块 1.安装pillow模块pip install pillow2.pillow模块的基本使用 1.创建图片from PIL import Image #定义使用Image类实例化一
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录