当前位置: 首页 > news >正文

Python爱心光波

爱心光波

文章目录

  • 前言
    • Turtle入门
      • 简单案例
      • 入门函数
    • 爱心光波
      • 程序设计
      • 程序分析
  • 尾声

前言

七夕要来啦,博主在闲暇之余创作了一个爱心光波,感兴趣的小伙伴们快来看看吧!

Turtle入门

Turtle 是一个简单而直观的绘图工具,它可以帮助你通过简单的命令来创建各种图形。Turtle 最初是一个基于Logo语言的图形库,在Python中,它被作为标准库的一部分提供。

简单案例

下面是一个基本的 Turtle 绘图入门示例:

import turtle
  • 创建一个画布窗口
window = turtle.Screen()
  • 创建一个画笔(turtle对象)
pen = turtle.Turtle()
  • 绘制一个正方形
for _ in range(4):pen.forward(100)pen.right(90)
  • 结束绘图并关闭画布窗口
turtle.done()

在上述示例中,我们首先导入了 turtle 模块,并创建了一个画布窗口对象。然后,我们创建了一个画笔对象,可以使用它来绘制我们想要的图形。
在创建了画笔之后,我们使用循环来绘制一个正方形,通过 pen.forward() 命令向前移动指定的距离(这里是100),通过 pen.right() 命令向右转指定的角度(这里是90度)来改变画笔的方向。
最后,我们调用 turtle.done() 来结束绘图,并关闭画布窗口。
这只是 Turtle 绘图的一个简单入门示例,你可以通过调用不同的命令和方法来绘制各种不同形状的图像,例如线条、圆、多边形等。Turtle 还提供了一些其他方法来控制画笔的颜色、粗细、填充等属性。

入门函数

当你正在使用Turtle绘图时,有一些基本函数可以帮助你移动画笔并绘制各种形状。下面是一些基本的Turtle函数的简介:

  • forward(distance) :向前移动画笔,指定移动的距离(单位为像素)。
  • backward(distance) :向后移动画笔,指定移动的距离(单位为像素)。
  • right(angle) :向右旋转画笔,指定旋转的角度(单位为度)。
  • left(angle) :向左旋转画笔,指定旋转的角度(单位为度)。
  • penup() :抬起画笔,移动时不绘制线条。
  • pendown() :放下画笔,移动时绘制线条。
  • goto(x, y) :将画笔移动到指定的坐标位置(x,y)。
  • setx(x) :将画笔的x坐标设置为指定值。
  • sety(y) :将画笔的y坐标设置为指定值。
  • setheading(angle) :设置画笔的朝向,指定旋转的角度(单位为度)。
  • circle(radius) :绘制一个圆,指定半径。
  • dot(size, color) :绘制一个点,指定大小和颜色。

这些仅仅是Turtle模块中可用的一些基本函数,还有其他更多的函数可以用于绘制各种多边形、填充图形、控制画笔颜色、粗细等。你可以查阅Python官方文档中的Turtle模块部分或其他Turtle相关的教程和示例代码,了解更多关于Turtle绘图的详细功能和用法。

爱心光波

程序设计

import turtle as tu
import random as ratu.setup(1.0, 1.0)  # 设置画板大小(小数表示比例,整数表示大小)
tu.screensize(1.0, 1.0)  # 设置屏幕大小
tu.bgcolor('black')  # 设置画布背景颜色
t = tu.Pen()  # 设置画笔
t.ht()  # 隐藏画笔
colors = ['pink', 'hotpink', 'deeppink', 'lightpink']  # 爱心的颜色列表,可以设置自己喜欢的颜色噢
# colors = ['skyblue', 'lightblue', 'blue', 'royalblue'] # 蓝色系
class Star():  # 星星类def __init__(self, r):  # 初始化self.r = r  # 爱心的半径self.x = 0 # 爱心的横坐标self.y = 120  # 爱心的纵坐标self.color = ra.choice(colors)  # 爱心的颜色self.outline = 2 # 爱心的外框大小(可不要)def draw(self):  # 画爱心函数,就是用turtle画爱心t.pensize(self.outline)t.penup()t.color(self.color)t.goto(self.x, self.y)t.pendown()# t.begin_fill()# t.fillcolor('pink')t.setheading(120)t.circle(self.r, 195)t.fd(self.r * 2.4)t.lt(90)t.fd(self.r * 2.4)t.circle(self.r, 195)# t.end_fill()def change(self):  # 改变爱心的大小(爱心不断增大)if self.r <= 100:self.r += 1else:self.r = 1self.x = 0self.y = 120self.c = ra.choice(colors)
Stars = []  # 星星列表
for i in range(200):  # 循环增加星星Stars.append(Star(i-1))
while True:  # 开始画星星tu.tracer(0)t.clear()for i in range(99):Stars[i].draw()Stars[i].change()tu.update()
tu.mainloop()

程序分析

这段代码使用了Python的turtle模块来实现画爱心星星的效果。下面是代码的详细分析:

  • import turtle as tu:导入turtle模块并将其别名为tu。

  • tu.setup(1.0, 1.0):设置画板的大小为1.0倍的屏幕大小。

  • tu.screensize(1.0, 1.0):设置屏幕大小为1.0倍的屏幕大小。

  • tu.bgcolor(‘black’):设置画布的背景颜色为黑色。

  • t = tu.Pen():创建一个画笔对象。

  • t.ht():隐藏画笔。

  • colors = [‘pink’, ‘hotpink’, ‘deeppink’, ‘lightpink’]:定义了爱心的颜色列表。

  • class Star()::定义了一个名为Star的类,用于绘制爱心。

  • def init(self, r)::类的初始化方法,r为爱心的半径。

  • self.r = r:将传入的半径值赋给对象的半径属性self.r。

  • self.x = 0:设置爱心的横坐标。

  • self.y = 120:设置爱心的纵坐标。

  • self.color = ra.choice(colors):随机选择一个颜色赋给爱心的颜色属性。

  • self.outline = 2:设置爱心的外框大小。

  • def draw(self)::定义了一个画爱心的方法。

  • t.pensize(self.outline):设置画笔的大小为爱心的外框大小。

  • t.penup():抬起画笔。

  • t.color(self.color):设置画笔的颜色为爱心的颜色。

  • t.goto(self.x, self.y):将画笔移动到爱心的起始位置。

  • t.pendown():放下画笔。

  • t.setheading(120):设置画笔的方向为120度。

  • t.circle(self.r, 195):绘制一个半径为self.r的弧形。

  • t.fd(self.r * 2.4):向前移动self.r * 2.4的距离。

  • t.lt(90):向左转90度。

  • t.fd(self.r * 2.4):向前移动self.r * 2.4的距离。

  • t.circle(self.r, 195):绘制一个半径为self.r的弧形。

  • def change(self)::定义了改变爱心大小的方法。

  • if self.r <= 100::如果爱心的半径小于等于100。

  • self.r += 1:爱心的半径加1。

  • else::如果爱心的半径大于100。

  • self.r = 1:将爱心的半径设置为1。

  • self.x = 0:将爱心的横坐标设置为0。

  • self.y = 120:将爱心的纵坐标设置为120。

  • self.c = ra.choice(colors):随机选择一个颜色赋给爱心的颜色属性。

当运行这段代码时,首先会导入turtle模块并将其别名为tu。然后通过调用tu.setup()和tu.screensize()函数设置画板和屏幕的大小。接下来,通过调用t = tu.Pen()创建一个画笔对象并隐藏画笔。然后定义了一个包含四个颜色值的列表colors,用于随机选择爱心的颜色。

接着定义了名为Star的类,用于绘制爱心。类的初始化方法__init__接受一个参数r,表示爱心的半径。在初始化方法中,将传入的半径值赋给对象的半径属性self.r,并设置爱心的初始坐标、颜色和外框大小。类中还定义了一个名为draw的方法,用于绘制爱心。在该方法中,根据对象的属性设置画笔的大小、颜色,并通过一系列的t.goto(), t.setheading(), t.circle()和t.fd()函数绘制了一个具有指定半径、颜色的爱心。

接下来,在主程序中创建了一个空的星星列表Stars。通过一个for循环,循环200次,每次创建一个爱心对象并将其加入星星列表。接着进入一个无限循环,开始绘制动画效果。

在循环开始处,通过调用tu.tracer(0)关闭了动画效果,以便实时显示绘制过程。然后调用t.clear()函数清空画布,准备重新绘制。接下来,通过遍历星星列表中的爱心对象,依次调用对象的draw方法来绘制每个爱心。

这段代码的执行结果是在一个黑色背景的画布上循环绘制不同颜色和大小的爱心。循环过程中,爱心的大小会逐渐增加,颜色也会随机变化。

尾声

祝大家七夕快乐!

相关文章:

Python爱心光波

文章目录 前言Turtle入门简单案例入门函数 爱心光波程序设计程序分析 尾声 前言 七夕要来啦&#xff0c;博主在闲暇之余创作了一个爱心光波&#xff0c;感兴趣的小伙伴们快来看看吧&#xff01; Turtle入门 Turtle 是一个简单而直观的绘图工具&#xff0c;它可以帮助你通过简…...

【分布式】Viewstamped Replication Revisited

篇前感悟&#xff1a; 阅读分布式系统文章的意义其实并不在于你个人真正地去开发这样一个基于这种协议的系统&#xff0c;因为真正去开发一个高可用的分布式系统实在是太难了&#xff08;对我来说…&#xff09;更多的还是汲取其中的思想&#xff0c;包括设计思路&#xff0c;优…...

微服务07-分布式缓存

前提: 单机的Redis存在四大问题: 解决办法:基于Redis集群解决单机Redis存在的问题 1、Redis持久化 Redis 具有持久化功能,其会按照设置以 快照 或 操作日志 的形式将数据持久化到磁盘。 Redis有两种持久化方案: RDB持久化AOF持久化注意: RDB 是默认持久化方式,但 Red…...

QGraphicsView放大时,paint有时不被调用,导致图像绘制不出来(2)

此前&#xff08;1&#xff09;解决的是在QGraphicsItem::boundingRect不变的情况下造成不绘制。这次解决的是QGraphicsItem::boundingRect随时都发生变化导致的不绘制。 这问题是我在不继承QGraphicsLineItem&#xff08;调用setLine&#xff09;&#xff0c;而是继承QGraphic…...

深入理解设计模式-创建型之建造者模式(与工厂区别)

什么是建造者设计模式&#xff1f;和工厂设计模式有什么区别 建造者设计模式&#xff08;Builder Design Pattern&#xff09;和工厂设计模式&#xff08;Factory Design Pattern&#xff09;都是面向对象设计中的创建型模式&#xff0c;但它们解决的问题和应用场景有所不同。…...

Centos7多台服务器免密登录

准备四台服务器: docker0 docker1 docker2 docker3 在docker0服务器上生成公钥和私钥 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…...

C语言实现哈希搜索算法

一、哈希搜索算法原理 哈希搜索&#xff0c;也叫散列查找&#xff0c;是一种通过哈希表&#xff08;散列表&#xff09;实现快速查找目标元素的算法。哈希搜索算法通常适用于需要快速查找一组数据中是否存在某个元素的场景&#xff0c;其时间复杂度最高为 O(1)&#xff0c;而平…...

MySQL卸载并重装指定版本

MySQL卸载并重装制定版本 学习新的项目&#xff0c;发现之前的Navicat已经失去了与现有MySQL的链接&#xff0c;而且版本也不适合&#xff0c;为了少走弯路&#xff0c;准备直接重装相应版本的MySQL 卸载现有MySQL 停止windows的MySQL服务&#xff0c;【windowsR】打开运行框…...

文件IO编程 1 2

头文件包含路径 linux 操作系统分为两大空间&#xff1a;用户空间和内核空间 这样划分&#xff0c;是为了保护内核的核心组件&#xff0c;不被轻易访问和修改 系统调用&#xff1a;安全的访问内核空间 其核心是&#xff1a;函数API&#xff08;API&#xff1a;用户编程接口&…...

Java后端框架模块整合

提示&#xff1a;使用Java后端开发框架能够提高开发效率、代码质量&#xff0c;提升可扩展性&#xff0c;降低开发成本和易于维护。 文章目录 前言MyBatis 框架知识Spring 框架知识SpringMVC 框架知识SpringBoot 框架知识 前言 提示&#xff1a;这里可以添加本文要记录的大概内…...

17 synchronized关键字使用 synchronized方法、synchronized块

synchronized方法、synchronized块 线程的同步不安全的线程示例1&#xff1a;示例2示例3 synchronized方法、synchronized块 线程的同步 并发&#xff1a;同一个对象被多个线程同时操作。 解决方案&#xff1a;让多个线程排队操作对象。 使用队列和锁解决多线程的并发问题。 同…...

django-基本环境配置

文章目录 django 环境安装1. 安装环境1.1 安装 Python (配置虚拟环境)1.1.1 步骤 1.2 Conda配置环境参考 django 环境安装 1. 安装环境 1.1 安装 Python (配置虚拟环境) 由于国外源速度慢&#xff0c;可以pip添加清华源 pip config set global.index-url https://pypi.tuna.…...

Springboot 实践(4)swagger-ui 测试controller

前文项目操作&#xff0c;完成了项目的创建、数据源的配置以及数据库DAO程序的生成与配置。此文讲解利用swagger-ui界面&#xff0c;测试生成的数据库DAO程序。目前&#xff0c;项目swagger-ui界面如下&#xff1a; 以”用户管理”为例&#xff0c;简单讲述swagger-ui测试数据库…...

PHP实践:分布式场景下的Session共享解决方案实现

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…...

07 - 查看、创建、切换和删除分支

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 查看分支2. 创建和切换分支3. 删除分支 1. 查看分支 git branch -va2. 创建和切换分支 第一种&#xff1a; 创建分支&#xff1a; git branch new_branch切换分支&#xff1a; …...

【SpringBoot】89、SpringBoot中使用@Transactional进行事务管理

事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。 1、SpringBoot 引用说明 新建的 Spring Boot 项目中,一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对…...

两天入门Linux、搭建Spring环境 第一天

一、Linux简介 1.什么是Linux 一个操作系统&#xff0c;未来公司里面会用到、接触的新操作系统。 2.为什么学Linux (1)个人职务需要&#xff0c;肯定会接触到Linux (2)职业发展&#xff0c;以后的发展肯定需要掌握Linux的许多使用方法 3.学哪些内容 (1)Linux基本介绍 (2)…...

OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

基于深度学习的运动目标检测&#xff08;一&#xff09; 1.YOLO算法检测流程2.YOLO算法网络架构3.网络训练模型3.1 训练策略3.2 代价函数的设定 2012年&#xff0c;随着深度学习技术的不断突破&#xff0c;开始兴起基于深度学习的目标检测算法的研究浪潮。 2014年&#xff0c;…...

CI/CD流水线实战

不知道为什么&#xff0c;现在什么技术都想学&#xff0c;因为我觉得我遇到了技术的壁垒&#xff0c;大的项目接触不到&#xff0c;做的项目一个字辣*。所以&#xff0c;整个人心浮气躁&#xff0c;我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末&#xff0c;我再次宅在…...

详解配置交换机多生成树MSTP+VRRP 的典型组网

详解配置交换机多生成树MSTPVRRP 的典型组网 组网&#xff1a; 1. 这是一个由三台交换机组成的倒三角型二层交换网络&#xff1b;网络中有4个VLAN&#xff1a;10、20、30、40&#xff1b;接口编号如图所示&#xff1b;SW3为接入层交换机&#xff0c;SW1、SW2为汇聚层交换机&am…...

二.net core 自动化发布到docker (Jenkins安装之后向导)

目录 ​​​​​​​​​​​​​​ 参考资料&#xff1a;https://www.jenkins.io/doc/book/installing/docker/#setup-wizard Post-installation setup wizard.(安装后安装向导) 基于上一篇文章安装&#xff0c;在安装并运行Jenkins&#xff08;不包括使用Jenkins Opera…...

【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 通过解释器模式来实现四则运算&#xff0c;如计算ab-c的值&#xff0c;具体要求 先输入表达式的形式&#xff0c;比如abc-de&#xff0c;要求表达式的字母不能重复在分别输入a,b,c,d,e的值最后求出结果 传统方案 编写一个方法&#xff0c;接收表达式的形式&#xf…...

【计算机网络】——数据链路层

二、组帧 1、字符计数法 帧头部使用一个字符来表示帧的大小(包括第一个计数字符) &#xff08;此处一字符一个字节&#xff09; 2、字符填充收尾定界法 特定字符来定界帧的首和尾。若帧中数据段出现等同于特定字符的字符内容&#xff0c;前置一个转义字符。(类似于正则表达…...

数据结构:栈和队列(超详细)

目录 ​编辑 栈&#xff1a; 栈的概念及结构&#xff1a; 栈的实现&#xff1a; 队列&#xff1a; 队列的概念及结构&#xff1a; 队列的实现&#xff1a; 扩展知识&#xff1a; 以上就是个人学习线性表的个人见解和学习的解析&#xff0c;欢迎各位大佬在评论区探讨&#…...

AI项目二:基于mediapipe的虚拟鼠标控制

若该文为原创文章&#xff0c;转载请注明原文出处。 一、项目介绍 由于博主太懒&#xff0c;mediapipe如何实现鼠标控制的原理直接忽略&#xff0c;最初的想法是想控制摄像头识别手指控制鼠标&#xff0c;达到播放电影的效果。基本上效果也是可以的。简单的说是使用mediapipe检…...

EVE-NG 隐藏没有镜像的模板

eve-ng 默认情况下&#xff0c;在添加node时&#xff0c;会列出所有的模板&#xff0c;这样用着很不方便。 通过以下方式&#xff0c;可以使没有设备的模板不可见 cp /opt/unetlab/html/includes/config.php.distribution /opt/unetlab/html/includes/config.php 打开 config…...

机器学习理论笔记(一):初识机器学习

文章目录 1 前言&#xff1a;蓝色是天的机器学习笔记专栏1.1 专栏初衷与定位1.2 本文主要内容 2 机器学习的定义2.1 机器学习的本质2.2 机器学习的分类 3 机器学习的基本术语4 探索"没有免费的午餐"定理&#xff08;NFL&#xff09;5 结语 1 前言&#xff1a;蓝色是天…...

Programming abstractions in C阅读笔记: p114-p117

《Programming Abstractions in C》学习第48天&#xff0c;p114-p117&#xff0c;​总结如下&#xff1a; 一、技术总结 主要通过random number介绍了随机数的相关用法&#xff0c;interface​示例(random.h)​&#xff0c;client program示例(craps.c)。 #include <stdio…...

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 …...

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …...