基于python的turtle实现圣诞树的绘制

news2024/10/7 16:16:47

文章目录

    • 一、前言
    • 二、基于turtle实现绘制圣诞树
    • 三、效果展示
    • 四、实现步骤
      • 代码实现分步骤
        • 1. 导入库
        • 2. 配置圣诞树高度等信息
        • 3. 定义函数get_color()可获取随机颜色
        • 4. 定义函数snow() 绘制一朵雪花
        • 5. 定义函数name()可随机写一些文字
        • 6. 定义函数koc() 绘制星星
        • 7.定义函数tree()绘制树干
        • 8.开始绘制树干
        • 9.绘制merry christmas,并循环等待
      • 完整编码如下
    • 题外话-关于“伪勤奋”

一、前言

提示:想基于turtle实现一个绘图,就找了相关案例,并实现了圣诞树的画法。可简单介绍此次创意背景。
参考:https://zhuanlan.zhihu.com/p/449174976

二、基于turtle实现绘制圣诞树

turtle是python内置库,是一直带着笔的小海龟,通过小海龟的爬行,可以绘制出各种各样的图形,十分有趣。在控制小海龟爬行的过程中,还能充分训练自己的编程思维。比如递归这个说不清理还乱的家伙!!

三、效果展示

在这里插入图片描述

四、实现步骤

代码实现分步骤

1. 导入库

from turtle import *
import random

2. 配置圣诞树高度等信息

n = 100.0 # n代表100个像素 
# setup设置宽高和起始xy位置
setup(500, 700, startx=None, starty=None)
# 画笔速度
speed("fastest")
# 背景颜色
screensize(bg='cornflowerblue')
# 画笔颜色,填充颜色
color("dark green")
fillcolor('yellow')
pensize(10)
# 画笔方向,向上
left(90)
# 前进2.8*n个像素
forward(2.8*n)

3. 定义函数get_color()可获取随机颜色

# 随机生成颜色
def get_color():
    color_arr = ['light coral', 'tomato', 'orange red', 'red','brown',
                 'firebrick','salmon', 'dark salmon','light salmon', 'orange',
                 'chocolate','yellow','gold', 'goldenrod',
                 'dark goldenrod', 'rosy brown','indian red', 'saddle brown',
                 'dark orange','coral',  'hot pink', 'deep pink',
                 'pink', 'light pink','pale violet red', 'maroon', 'medium violet red',
                 'violet red','medium orchid']

    index = random.randint(0,len(color_arr)) - 1
    return color_arr[index]

4. 定义函数snow() 绘制一朵雪花

# 画雪花
def snow(snow_count):
    hideturtle() # 隐藏小海龟
    pensize(2) # 笔的宽度
    for i in range(snow_count):
        pencolor("white") # 笔的颜色
        pu() # pu = penup 抬起笔
        # goto() 画笔移动到指定位置
        goto(random.randint(-180, 180), random.randint(-180, 340))
        pd() # pd = pendown 落下笔
        dens = random.randint(10, 12)
        snowsize = random.randint(6, 10)
        for _ in range(dens):
            forward(snowsize)  # 向当前画笔方向移动snowsize像素长度
            backward(snowsize)  # 向当前画笔相反方向移动snowsize像素长度
            right(360 / dens)  # 顺时针移动360 / dens度

5. 定义函数name()可随机写一些文字

# 飘落名字
def name(name_count):
    hideturtle() # 隐藏小海龟
    pensize(2) #笔的大小
    for i in range(name_count):
        # pencolor指定笔的颜色 get_color随机获取颜色
        pencolor(get_color())
        pu() # 抬起笔
        # goto 到指定位置
        goto(random.randint(-220, 220), random.randint(-300, 340))
        pd() # 落下笔
        # 这里可以换成自己的名字、自己想要的词语
        name_arr = ['圣诞','快乐','健康','执行合一']
        namesize = random.randint(10, 15)
        # 指定一个index 用于从name_arr中提取一个元素
        index = random.randint(0,len(name_arr)) - 1
        dens = random.randint(10, 12)
        # 写文字
        write(name_arr[index], align="right", font=("Arial", namesize, "bold"))

6. 定义函数koc() 绘制星星

# 画星星
def koc(size):
    pensize(3) # 指定笔的大小
    pencolor(get_color()) # 指定笔的颜色
    begin_fill() # 颜色填充开始
    fillcolor('yellow') # 填充黄色
    for i in range(5):
        left(72) # left转动的角度
        fd(size) # 想前走size大小
        right(144) #right 转动的角度
        fd(size) # 想前走size大小
    end_fill() # 颜色填充结束,完成一个星星

7.定义函数tree()绘制树干

在绘制树干的过程中会绘制相关的星星。在递归中 ,画笔大小d是逐渐降低的,就形成了越到树梢,越细的效果。

# 画树干
backward(n*4.8)
def tree(d, s):
    """
    :param d: 画笔大小
    :param s: 前进距离
    :return:
    """
    if d <= 0: return
    if d == 1:
        koc(5) # 画一个5角星
    pensize(d) # 指定画笔大小
    forward(s) # 前进一些
    tree(d-1, s*.81) # 递归调用
    right(120) # 向右转 120度
    tree(d-3, s*.5)
    right(120) # 像右转120
    tree(d-3, s*.5)
    right(120) # 像右转120
    backward(s)  # 后退
    color("dark green") # 指定演示

8.开始绘制树干

# 执行函数
tree(14, n) #  绘制树干 指定 初始画笔大小
snow(40) # 随机绘制雪花
name(15) # 随机绘制名字

9.绘制merry christmas,并循环等待

# 写Merry Christmas文字
penup() # 抬起笔
seth(0) # 设置线程 seth = setheading
goto(190, -305) # 跳转到指定位置
pendown() #落笔
color("red") # 指定颜色
write("Merry Christmas", align="right", font=("Arial", 50, "bold"))

done() # 循环等待 done = mainloop

完整编码如下

# 1. 导入库


from turtle import *
import random

# 2. 配置圣诞树高度等信息


n = 100.0 # n代表100个像素
# setup设置宽高和起始xy位置
setup(500, 700, startx=None, starty=None)
# 画笔速度
speed("fastest")
# 背景颜色
screensize(bg='cornflowerblue')
# 画笔颜色,填充颜色
color("dark green")
fillcolor('yellow')
pensize(10)
# 画笔方向,向上
left(90)
# 前进2.8*n个像素
forward(2.8*n)


# 3. 定义函数get_color()可获取随机颜色


# 随机生成颜色
def get_color():
    color_arr = ['light coral', 'tomato', 'orange red', 'red','brown',
                 'firebrick','salmon', 'dark salmon','light salmon', 'orange',
                 'chocolate','yellow','gold', 'goldenrod',
                 'dark goldenrod', 'rosy brown','indian red', 'saddle brown',
                 'dark orange','coral',  'hot pink', 'deep pink',
                 'pink', 'light pink','pale violet red', 'maroon', 'medium violet red',
                 'violet red','medium orchid']

    index = random.randint(0,len(color_arr)) - 1
    return color_arr[index]


# 4. 定义函数snow() 绘制一朵雪花


# 画雪花
def snow(snow_count):
    hideturtle() # 隐藏小海龟
    pensize(2) # 笔的宽度
    for i in range(snow_count):
        pencolor("white") # 笔的颜色
        pu() # pu = penup 抬起笔
        # goto() 画笔移动到指定位置
        goto(random.randint(-180, 180), random.randint(-180, 340))
        pd() # pd = pendown 落下笔
        dens = random.randint(10, 12)
        snowsize = random.randint(6, 10)
        for _ in range(dens):
            forward(snowsize)  # 向当前画笔方向移动snowsize像素长度
            backward(snowsize)  # 向当前画笔相反方向移动snowsize像素长度
            right(360 / dens)  # 顺时针移动360 / dens度


# 5. 定义函数name()可随机写一些文字


# 飘落名字
def name(name_count):
    hideturtle() # 隐藏小海龟
    pensize(2) #笔的大小
    for i in range(name_count):
        # pencolor指定笔的颜色 get_color随机获取颜色
        pencolor(get_color())
        pu() # 抬起笔
        # goto 到指定位置
        goto(random.randint(-220, 220), random.randint(-300, 340))
        pd() # 落下笔
        # 这里可以换成自己的名字、自己想要的词语
        name_arr = ['圣诞','快乐','健康','执行合一']
        namesize = random.randint(10, 15)
        # 指定一个index 用于从name_arr中提取一个元素
        index = random.randint(0,len(name_arr)) - 1
        dens = random.randint(10, 12)
        # 写文字
        write(name_arr[index], align="right", font=("Arial", namesize, "bold"))


# 6. 定义函数koc() 绘制星星


# 画星星
def koc(size):
    pensize(3) # 指定笔的大小
    pencolor(get_color()) # 指定笔的颜色
    begin_fill() # 颜色填充开始
    fillcolor('yellow') # 填充黄色
    for i in range(5):
        left(72) # left转动的角度
        fd(size) # 想前走size大小
        right(144) #right 转动的角度
        fd(size) # 想前走size大小
    end_fill() # 颜色填充结束,完成一个星星


# 7.定义函数tree()绘制树干
# 在绘制树干的过程中会绘制相关的星星。在递归中 ,画笔大小d是逐渐降低的,就形成了越到树梢,越细的效果。

# 画树干
backward(n*4.8)
def tree(d, s):
    """
    :param d: 画笔大小
    :param s: 前进距离
    :return:
    """
    if d <= 0: return
    if d == 1:
        koc(5) # 画一个5角星
    pensize(d) # 指定画笔大小
    forward(s) # 前进一些
    tree(d-1, s*.81) # 递归调用
    right(120) # 向右转 120度
    tree(d-3, s*.5)
    right(120) # 像右转120
    tree(d-3, s*.5)
    right(120) # 像右转120
    backward(s)  # 后退
    color("dark green") # 指定演示


# 8.开始绘制树干


# 执行函数
tree(14, n) #  绘制树干 指定 初始画笔大小
snow(40) # 随机绘制雪花
name(15) # 随机绘制名字


# 9.绘制merry christmas,并循环等待


# 写Merry Christmas文字
penup() # 抬起笔
seth(0) # 设置线程 seth = setheading
goto(190, -305) # 跳转到指定位置
pendown() #落笔
color("red") # 指定颜色
write("Merry Christmas", align="right", font=("Arial", 50, "bold"))

done() # 循环等待 done = mainloop

题外话-关于“伪勤奋”

著名心理学专家Jordan Peterson教授曾概括“伪勤奋”的4个表现,看看你中了几个?
1.花大量时间做事情中最容易的环节,还到处炫耀:没有功劳也有苦劳。
2.以“准备”的名义拖延,看上去很忙但事情没有任何进展。
3.从来不验证工作成果,不知道做得好做得坏,只顾闷头拉车,不会抬头看天。
4.读了很多书,但从不总结规律;即使总结了规律,也没有用到实践中。

请在评论区说出你的心声吧!!

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

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

相关文章

Qt中调用thrift

thrift是一个Apache公司开源的一款RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;让不同语言构建的服务可以做到远程调用无缝对接。 thrift库分两部分&#xff1a; libthrift - 核心库文件&#xff0c;需要依赖OpenSSL、boost libthriftnb - 包含thrift非阻…

内网穿透基本使用

内网穿透基本使用 文章目录内网穿透基本使用前言一、内网穿透二、工具1.FRP2.LCX3.NPS4.Sunny-Ngork三、Sunny-ngork使用四、Frp内网穿透代理1.一层代理2.二层代理总结前言 之前零零碎碎接触过不少关于内网渗透测试、内网穿透的知识&#xff0c;但是不得不说渗透测试很吃基础、…

初学Java web(十一)AjaxAxiosJSON

Ajax&Axios&JSON 概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用:1.与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替…

ArcGIS基础实验操作100例--实验10绘制带空洞的面要素

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验10 绘制带空洞的面要素 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&…

【JavaScript】飞机大战简单网页版(源码下载)

文章目录一、效果演示设计思路二、鼠标版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码js.js文件plane.js文件三、键盘版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码四、代码资源分享一、效果演示 利用html&#xff0c;css&#xff0c;js制…

qt QCustomplot 用QCPItemStraightLine画参考线,阈值线,水平线

想要在两个坐标系下都画上如下参考线(阈值线&#xff0c;或者 水平线)&#xff0c; 这个参考线随着坐标轴的拖拽能够一直显示 我们找到了QCPItemStraightLine&#xff0c;该类能够画一条无限延伸的直线&#xff0c;通过下面的代码能够实现在A坐标系画一条水平线&#xff0c;但不…

[CF-EDU]Segment Tree - part 1 - Step 1 - Practice

练习名称&#xff1a;ITMO Academy: pilot course Segment Tree 练习链接&#xff1a;Segment Tree, part 1, Step1, Practice cf官方的线段树专题练习 A. Segment Tree for the Sum 单点修改&#xff0c;区间和查询 #include <bits/stdc.h> #define lson (u <&l…

P1825 [USACO11OPEN]Corn Maze S

题目描述 This past fall, Farmer John took the cows to visit a corn maze. But this wasnt just any corn maze: it featured several gravity-powered teleporter slides, which cause cows to teleport instantly from one point in the maze to another. The slides work…

Docker安装镜像,并运行成为容器

1.Docker作用 一个项目中&#xff0c;部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等&#xff0c;这些服务部署时所需要的函数库、依赖项各不相同&#xff0c;甚至会有冲突。给部署带来了极大的困难。 而Docker确巧妙的解决了这些问题, Docker为了解决依赖的兼容问题的…

关于两种单菌种发酵的豆瓣酱代谢组学方面差异研究

生活离不开柴米油盐酱醋茶&#xff0c;其中酱油是中国传统的调味品&#xff0c;主要是由大豆经过发酵酿造而成。酱油由酱演变而来&#xff0c;早在三千多年前&#xff0c;中国就有制作酱的记载了。 本期百趣代谢组学文献分享为大家分享的文献是百趣生物协助客户发表的关于两种…

Git cherry-pick

Git cherry-pick 当有多个分支&#xff0c;想将一个分支 A 的提交合并到另一个分支 B 一&#xff1a;将分支A的所有提交合并到分支B&#xff0c;执行合并即可 二&#xff1a;将分支A 的某一次提交合并到分支 B&#xff0c;需要使用 git cherry-pick commit 命令 如下图&#…

随机森林-sklearn

随机森林 1.概述 1.1 集成算法概述 本身并不是一个单独的机器学习算法&#xff0c;而是通过在数据上构建多个模型&#xff0c;集成所有模型的建模结果。以此来获得最好的结果。 集成算法的目标&#xff1a; 集成算法会考虑多个评估器的建模结果&#xff0c;汇总之后得到一个…

物联网低功耗蓝牙核心配置技术: 赋能智能家居和智能工业场景

蓝牙我们都不陌生&#xff0c;早已成为深入我们生活的一项科技。不过&#xff0c;我们所知所用的还只是蓝牙的一部分。而蓝牙目前作为物联网中的一项重要通信技术&#xff0c;其应用还远远不止这些&#xff0c;今天就为大家讲讲蓝牙技术中的低功耗技术的应用及分类。 蓝牙低功耗…

原神私服搭建教程 (最新版)

搭建教程 1.准备阶段 1.请先确保电脑内有这些安装环境&#xff0c;否则私服无法运行&#xff01;&#xff01;&#xff01; MongoDB Python3.8 java17 mitmproxy 没有请在群文件下载安装环境&#xff0c;安装即可。特别强调&#xff1a;java17直接放在C:\Program Files目录下即…

初识Kubernetes:(4)Kubernetes实战入门

初识Kubernetes&#xff1a;&#xff08;4&#xff09;Kubernetes实战入门1 前言2 Namespace2.1 概述2.2 应用示例3 Pod3.1 概述3.2 语法及应用示例1 前言 介绍如何在kubernetes集群中部署一个Nginx服务&#xff0c;并且能够对其访问。 2 Namespace 2.1 概述 Namespace是ku…

写给Java程序员的GRPC入门系列(2)

点击上方GRPC专栏看完整系列 文章目录Abstract前置依赖本文初始状态编写protobuffer文件生成代码下一步Abstract 网上有很多GRPC的例子&#xff0c;但是却没有能够写给普通Java开发人员手把手入门少走弯路的教程。 本教程保证按照步骤一步步来你就可以完成GRPC从0到1的构建。 …

模型驱动PDR、数据驱动PDR实验效果对比

本学期的室内导航位置服务课程结束了&#xff0c;最后有一个结课作业做了一些工作&#xff0c;在这里分享给大家&#xff0c;同时也是自己的一个记录。 主要内容包括以下四个方面&#xff1a; 模型驱动PDR数据驱动PDR实验效果对比模型驱动PDR测试效果数据驱动PDR-RoNIN官方预训…

JSP ssh相亲网站系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh相亲系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发 。开发环境为TOMCAT7.0,Myeclip…

MergeTree原理之存储

我们都知道在MergeTree中数据是按列存储的&#xff0c;但是具体到存储的细节、以及如何工作的&#xff0c;都存在很多疑问。数据存储&#xff0c;就好比一本书中的文字&#xff0c;在排版时&#xff0c;绝不会密密麻麻地把文字堆满&#xff0c;这样会导致难以阅读。更为优雅的做…

Git学习:各阶段回退方法

文章目录一、问题背景二、解决方式1. 回退情况1&#xff1a;文件在工作区进行回退2. 回退情况2&#xff1a;文件在暂存区进行回退3. 回退情况3&#xff1a;文件在本地仓库进行回退4. 回退情况4&#xff1a;文件已经在远程仓库中一、问题背景 Git 是分布式的软件管理系统。在把…