【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员

news2024/9/20 22:49:23

最近在各大社交平台看到好多圣诞树,看到大佬们画的圣诞树一个比一个精致,我也特别想尝试画一棵特别的圣诞树。下面是我画的一棵简易的圣诞树,虽然和网络上大佬们的圣诞树相比不是很精致,但是对于萌新们来说,画这样一棵简易的圣诞树还是非常轻松的。

ps:重要的不是圣诞树,重要的是你的心意哦~ 

  

目录

一、让我们先来学习Python画图小工具——Turtle(小海龟) 

1.1 Turtle画板 

1.2 Turtle画笔 

1.3 Turtle画图

1.4 Turtle填色

1.5 Turtle写字

二、在了解画图的基本原理后,让我们一起为她画一棵圣诞树叭 

2.1 画一棵最简单的小树

2.2 画一棵豪华圣诞树


一、让我们先来学习Python画图小工具——Turtle(小海龟) 

小海龟(Turtle)是Python中画图的一个重要的包,里面包含丰富的画图工具以及画图的各种功能,当你学会了用Turtle画图后,你可以画任何你想画的图案,此时你就可以在圣诞树上添加你的装饰,把一棵简易的圣诞树变成精致的圣诞树了哈哈哈。是不是已经迫不及待啦,那就让我们一起来看看叭~

1.1 Turtle画板 

Turtle的画板大小可以用turtle.screensize()函数来设置:

turtle.screensize(width,height,bg):设置画板的大小,包含长和宽,width为宽,height为高,bg为画布颜色

1.2 Turtle画笔 

Turtle的画笔有几个常用的函数,例如:

①turtle.penup():抬起画笔,此时移动画笔不会在画布上留下痕迹哦

②turtle.pendown():放下画笔,与turtle.penup相对应,放下画笔后就可以继续画画了(放下画笔后画画会在画布上留下痕迹)

③turtle.pensize():控制画笔的大小(可以根据需求自行定义画笔的大小哦)

④turtle.pencolor():控制画笔的颜色(可以自己在网上查阅所有python可以使用的颜色,python里面可以用的颜色有很多的哦)

⑤turtle.hideturtle():隐藏画笔(隐藏画笔以后画图时画笔就看不到了)

1.3 Turtle画图

在画图的过程中,我们经常要使用一些简单的移动函数:

①turtle.forward(x):将画笔向前移动x个像素(x可以理解为距离)

②turtle.backward(x):将画笔向后退x个像素(x可以理解为距离)

③turtle.left(n):将画笔向左旋转n度

④turtle.right(n):将画笔向右旋转n度

⑤turtle.speed():设置画笔画图的速度(1~10递增,0最快)

1.4 Turtle填色

在画好图后,我们经常需要对其进行填色,这里可以用turtle.fillcolor()函数,括号里写入你想填充的颜色即可。

在使用turtle.fillcolor()函数要注意其基本格式为:

turtle.beginfill()     #开始填充

turtle.fillcolor()      #输入填充的颜色

turtle.endfill()        #结束填充

1.5 Turtle写字

在完成整个画图后,我们还需要最重要的一步,那就是写给那个她的祝福语,这才是画图的意义,在这里,我们用turtle.write()函数进行写字:

turtle.write(" ",move,align,font):

第一个位置双引号内填入要写的字,快写上你想对她说的祝福吧

move(可选):在默认情况下,move为false。如果move为true,则笔将移动到右下角

align(可选):可取值是left即左、center即中、right即右之一,是字符串格式

font(可选):字体三元组(fontname、fontsize、fonttype),fontname即字体名称(字符串格式,如“宋体”),fontsize即字体大小),fonttype即字体类型如:normal(普通)、bold(粗体)、italic(斜体)

二、在了解画图的基本原理后,让我们一起为她画一棵圣诞树叭 

经过上面的学习,相信你一定迫不及待想要尝试了吧,让我们一起打开Pycharm,为她定做一棵特别的圣诞树吧!

可以参考我写的简易圣诞树哦~

2.1 画一棵最简单的小树

这是一棵非常非常简易的小小圣诞树哈哈哈~

让我们一起来看看这颗小小的圣诞树如何构造出来的叭~

import turtle as t
import random as r
def treet(d,s):      #运用递归的方法画圣诞树
    t.hideturtle()              #隐藏画笔
    t.pencolor('limegreen')     #画笔颜色置为绿色,用来画树
    t.pensize(5)                #画笔大小为5
    t.speed(0)                  #最快速度画树(其实挺慢的)
    if d<=0:
        return
    t.forward(s)
    treet(d-1,s*0.8)
    t.right(120)
    treet(d-3,s*0.5)
    t.right(120)
    treet(d-3,s*0.5)
    t.right(120)
    t.backward(s)
if __name__ == '__main__':      #主函数
    t.up()
    t.goto(0,-110)
    t.down()
    t.left(90)
    treet(10,60)
    t.done()  

2.2 画一棵豪华圣诞树

让我们先来看看效果图叭~

话不多说~直接上技术~

import turtle as t  
import random as r
def star():     #画圣诞树顶的大星星
    t.hideturtle()      #隐藏画笔
    t.pensize(2)        #给画笔设置大小
    t.pencolor("gold")  #给画笔设置颜色,'gold'表示金色
    t.up()              #提起画笔,画笔移动时不会画画
    t.forward(5)        #将画笔向前移5个像素(此时画笔方向向右,即向右移动5个像素)
    t.down()            #画笔放下,画笔移动时会产生轨迹
    t.begin_fill()      #给星星填充颜色
    for i in range(5):  #因为是五角星,所以要循环五次画五个角
        t.forward(20)
        t.right(144)
        t.forward(20)
        t.left(72)
    t.fillcolor('yellow')   #设置填充的颜色
    t.end_fill()
    return
def stars():          #画圣诞树上的小星星
    t.hideturtle()       #隐藏画笔
    t.speed(0)           #设置画画速度,0为最快速
    t.pensize(5)         #设置画笔大小
    for i in range(5):   #循环五次画五个角,与画大星星一样
        t.forward(5)
        t.right(144)
        t.forward(5)
        t.left(72)
    return
def stares():           #循环画圣诞树上的小星星
    t.hideturtle()      #隐藏画笔
    x1=-110   #x1赋初值
    x2=110    #x2赋初值
    y1=-40    #y1赋初值
    y2=-15    #y2赋初值
    n=0       #n用来控制在圣诞树两边画星星
    c = ['red', 'orange', 'yellow', 'brown', 'cyan', 'pink', 'blue', 'blueviolet','gold','white']    #星星的颜色,可自定义
    for i in c:   #循环画不同颜色的星星
        t.pencolor(i)     #每次从颜色列表c中按序取一个颜色
        t.up()      #找画星星的位置时要记得提起画笔
        if n%2==0:        #当n为偶数时在圣诞树左边画星星
            t.setx(r.randint(x1,0))
            t.sety(r.randint(y1,y2))
        else:             #当n为奇数时在圣诞树右边画星星
            t.setx(r.randint(0,x2))
            t.sety(r.randint(y1,y2))
        t.down()
        stars()     #开始画星星
        x1+=10      #每次画完记得按圣诞树的层数要将x1,x2减小,y1,y2上移
        x2-=10
        y1+=25
        y2+=25
        n+=1        #n=n+1
def tree(d,s):      #运用递归的方法画圣诞树
    t.hideturtle()              #隐藏画笔
    t.pencolor('limegreen')     #画笔颜色置为绿色,用来画树
    t.pensize(5)                #画笔大小为5
    t.speed(0)                  #最快速度画树(其实挺慢的)
    if d<=0:
        return
    t.forward(s)
    tree(d-1,s*0.8)
    t.right(120)
    tree(d-3,s*0.5)
    t.right(120)
    tree(d-3,s*0.5)
    t.right(120)
    t.backward(s)
def trees():          #画完整的圣诞树
    t.hideturtle()          #隐藏画笔
    t.left(90)              #将画笔向左旋转90度
    t.up()                  #提起画笔
    t.goto(0,-110)          #移动画笔到坐标(0,-110)处开始画树
    t.down()
    t.pencolor('saddlebrown')   #先画树根,将画笔置为棕色
    t.pensize(20)           #树根比较粗,画笔大小设置大一点
    t.forward(50)           #树根长度为50个像素
    t.up()                  #提笔
    t.goto(0,-50)           #将画笔移到(0,-50)处
    t.down()
    tree(15,60)             #调用画树的递归函数,慢慢画树
    t.goto(0,250)           #画完树后,将画笔移到(0,250)的位置,准备画大星星
    t.down()
    t.right(90)             #将画笔向右旋转90度,指向右方,准备画大星星
    star()                  #画大星星
def snow():            #画雪花(全屏)
    t.hideturtle()     #隐藏画笔
    t.pensize(2)       #画笔大小
    t.speed(0)         #画雪花的速度
    for i in range(500):          #循环画500个雪花
        t.pencolor('white')       #雪花是白色的
        t.penup()                 #提笔
        t.setx(r.randint(-1000,1000))     #在画布上随机找点
        t.sety(r.randint(-1000,1000))
        t.pendown()
        snowsize=r.randint(4,10)          #雪花大小
        for i in range(6):            #画雪花(雪花为六瓣,需要循环六次)
            t.forward(int(snowsize))
            t.backward(int(snowsize))
            t.left(60)
def gift():       #画正方体礼物盒
    t.hideturtle()       #隐藏画笔
    t.speed(0)           #画笔速度
    x=40    #礼物盒的长和宽,我设置为正方形礼物盒,长宽高相等
    y=16    #由于是立体图形,宽与长不一样
    for i in range(4):    #以下为画礼物盒的方法(x,y的值可以自行修改)
        t.forward(x)
        t.left(90)
    t.up()
    t.left(45)
    t.forward(y)
    t.right(45)
    t.down()
    for i in range(4):
        t.forward(x)
        t.left(90)
    t.up()
    t.right(135)
    t.forward(y)
    t.down()
    t.left(180)
    t.forward(y)
    t.backward(y)
    t.right(45)
    t.forward(x)
    t.left(45)
    t.forward(y)
    t.backward(y)
    t.left(45)
    t.forward(x)
    t.right(45)
    t.forward(y)
    t.backward(y)
    t.left(135)
    t.forward(x)
    t.right(135)
    t.forward(y)
    t.backward(y)
    t.right(135)
    t.forward(x)
    t.left(90)
def gifts():            #画多个正方体礼物盒
    t.hideturtle()      #隐藏画笔
    t.penup()           #提笔
    t.goto(-180,-150)    #将画笔移到(-180,-150)的位置准备画礼物盒
    t.pendown()
    t.pensize(5)         #画笔大小
    c=['red','orange','yellow','green','cyan','blue','blueviolet']    #礼物盒的颜色
    for i in c:          #循环画不同颜色的礼物盒
        t.up()
        t.forward(40)
        t.down()
        t.pencolor(i)
        gift()
def writes():       #写字:“圣诞快乐!”
    t.pencolor("cyan")      #画笔颜色,天蓝色
    t.hideturtle()          #隐藏画笔
    t.up()
    t.goto(-160,-250)       #从(-160,-250)开始写字
    t.down()
    t.write("Merry Christmas!",font=("Comic Sans MS",30,"bold"))   #开始写字,"Merry Christmas!"为要写的字,"Comic Sans MS"为字体,30为字的大小,bold为粗体(可自行修改要写的字)
def treet(d,s):      #运用递归的方法画圣诞树
    t.hideturtle()              #隐藏画笔
    t.pencolor('limegreen')     #画笔颜色置为绿色,用来画树
    t.pensize(5)                #画笔大小为5
    t.speed(0)                  #最快速度画树(其实挺慢的)
    if d<=0:
        return
    t.forward(s)
    treet(d-1,s*0.8)
    t.right(120)
    treet(d-3,s*0.5)
    t.right(120)
    treet(d-3,s*0.5)
    t.right(120)
    t.backward(s)
if __name__ == '__main__':      #主函数
    t.bgcolor('black')      #将画布置为黑色
    trees()         #画圣诞树
    stares()        #画树上的星星
    gifts()         #画礼物盒
    writes()        #写祝福语
    snow()          #下雪(画雪花)
    t.done()        #将画板停住(否则画完画会自动退出画画界面)  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Access denied for user ‘root‘ @‘123.233.244.218‘(using password:YES)的解决方法

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 在我们新买了个服务器之后&#xff0c;数据库我觉得是比不可少的吧&#xff0c;任何一个项目&#xff0c;只要是动态的&#xff0c;都需要数据做数据的服务于支撑&#xff0c;目前我…

JUC并发编程第八篇,谈谈你对CAS的理解?自旋锁,CAS底层原理和存在的问题?

JUC并发编程第八篇&#xff0c;谈谈你对CAS的理解?自旋锁&#xff0c;CAS底层原理和存在的问题&#xff1f;一、CAS是什么&#xff1f;二、CAS的底层原理&#xff0c;如何理解UnSafe类&#xff1f;比较&#xff1a;i线程不安全&#xff0c;那 atomicInteger.getAndIncrement()…

笔记本电脑有必要分盘吗?电脑是分盘好还是不分盘好

电脑分区是指把电脑磁盘划分成多个磁盘分区&#xff0c;不同的磁盘分区用于存储相应类型的数据。许多用户新购置的电脑&#xff0c;打开一看&#xff0c;都会发现&#xff1a;“电脑只有一个C盘&#xff0c;没有其他的磁盘。那么&#xff0c;要不要对电脑分区呢&#xff1f;”笔…

共享车位|基于SpringBoot+vue+node共享车位平台的设计与实现

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java、前端、Pythone开发多年&#xff0c;做过高程&#xff0c;项目经理&#xff0c;架构师 主要内容&#xff1a;Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 文末获得源码 …

2022-12-6-Cmake工程转VS环境开发

新建工程后目录有 .vs 执行文件目录 x64 baseline.sln 首先新建一个目录&#xff0c;下面分为四个目录分别是dll&#xff0c;idl&#xff0c;include&#xff0c;lib 在include目录下面把所有Cmake工程中的include目录下的文件夹拷过来 在x64的debug下面把所有的dll动态库拷…

数据比较器,对比数据前后变化细节

前言 在开发的过程中&#xff0c;有时候需要对数据进行比对&#xff0c;来判断是否发生变化。如果一个字段一个字段比较&#xff0c;就太麻烦了。所以通过整合注解与反射的方式&#xff0c;实现一个通用的实体数据比较框架。 设计 使用注解&#xff0c;确定需要比较的属性。…

进程管理笔记

查看进程详情 命令&#xff1a;ps -aux 查看进程 能够观察所有系统的数据 命令&#xff1a;ps la | head -5 命令&#xff1a;ps axjf | head -20 仅查看自己的bash相关的进程 命令&#xff1a;ps l 观察系统所有进程 命令&#xff1a;ps aux 观察进程变化命令 - top …

微服务框架 SpringCloud微服务架构 21 RestClient 操作文档 21.3 更新文档

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构21 RestClient 操作文档21.3 更新文档21.3.1 更新文档21 RestClient 操作文…

Python:函数进阶

目录 一、Python中的推导式 需求一 需求二 二、Python的全局作用域 三、Python的多参数传递 四、Python的装饰器 被装饰的方法不带参数 被装饰的方法带参数 带参数的装饰器 一、Python中的推导式 列表生成式是python内置的一种创建列表的方法&#xff0c;通过在[ ]内部执…

会话跟踪技术(Cookie和Session)

目录概述Cookie基本使用Cookie原理Cookie 存活时间Session基本使用Session原理Session使用细节Seesion 销毁&#xff1a;Cookie和Session的对比最后概述 会话&#xff1a; 用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&…

Mac系统安装Kafka 3.x及可视化工具

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

网络工程师备考3章

注&#xff1a;本章考察较少&#xff0c;冲刺阶段可直接跳过 最常考点&#xff1a;帧中继&#xff0c;HDLC 3.1 公共交换电话网 英文&#xff1a;Public Switched Telephone Network ,PSTN 这种主网架构已经被淘汰了&#xff0c;现在的电话骨干网都是数字信号&#xff0c;目…

web课程设计网页规划与设计 基于HTML+CSS+JavaScript制作智能停车系统公司网站静态模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java中三种I/O模型 BIO,NIO,AIO

UNIX 系统下&#xff0c; IO 模型一共有 5 种&#xff1a; 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。 这也是我们经常提到的 5 种 IO 模型 &#xff08;1&#xff09;同步阻塞I/O模型 应用程序发起read调用后&#xff0c;一直处于阻塞状态 内…

BP综述:自闭症中基于功能连接体的预测模型

自闭症是一种异质性的神经发育疾病&#xff0c;基于功能磁共振成像的研究有助于推进我们对其对大脑网络活动影响的理解。我们回顾了使用功能连接和症状的测量的预测建模如何帮助揭示对这种情况的关键见解。我们讨论了不同的预测框架如何进一步加深我们对复杂自闭症症状学基础的…

Word处理控件Aspose.Words功能演示:在 Python 中将 Word DOCX 或 DOC 转换为 PDF

Word 到PDF是最流行和执行最广泛的文档转换之一。DOCX或DOC文件在打印或共享之前会转换为 PDF 格式。在本文中&#xff0c;我们将在 Python 中自动将 Word 转换为 PDF。步骤和代码示例将演示如何使用 Python 将 Word DOCX 或 DOC 转换为 PDF。此外&#xff0c;您将了解自定义 W…

Stable Diffusion模型阅读笔记

Stable Diffusion模型 什么是Stable Diffusion模型 一般而言&#xff0c;扩散是在图像中反复添加小且随机的噪声。与之相反&#xff0c;Stable Diffusion模型是一种将噪声生成为图像的机器学习模型。经过训练&#xff0c;它可逐步对随机高斯噪声进行去噪以获得感兴趣的样本&a…

Apache Hop Transforms Samples【持续完善中】

Samples transforms 1、abort-basic.hpl 根据筛选器行转换的结果中止此管道 第一步:添加Data grid转换,Meta部分维护字段。 Data部分维护数据,如下图。 第二步:添加filter rows,如下图 按照如下截图进行修改: 第三步:添加Abort 第四步:执行截图如下:

[附源码]Python计算机毕业设计Django学生综合数据分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Golang 【basic_leaming】fmt.Print, fmt.Printf, fmt.Println 的区别

阅读目录fmt 包fmt.Print 原样输出fmt.Printf 格式输出fmt.Println 值 空格 输出换行输出Println 和 Print 区别Println 和 Printf 区别变量类型推导方式定义变量使用 Printf打印一个变量的类型fmt 包 fmt format&#xff0c;是一种格式化输出函数汇总包&#xff0c;用于格式…