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

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

一、前言


提示:想基于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.读了很多书,但从不总结规律;即使总结了规律,也没有用到实践中。


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

相关文章
|
5月前
|
算法 Java Python
使用Python来绘制樱花树
本文以林徽因的《你是人间的四月天》为引,将春日意象与现代职场编程艺术结合,通过Python的Turtle模块绘制分形树和花瓣图案。文章详细解析了Turtle模块的使用方法、递归算法及随机性在图形生成中的应用,展示了如何用代码创造自然美感。核心代码包含tree函数(绘制分形树)和petal函数(绘制花瓣),最终生成一幅生动的春日画卷。项目不仅帮助读者掌握Turtle绘图技巧,更激发对编程艺术的兴趣,鼓励探索数字世界的无限可能。
133 5
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
134 4
|
12月前
|
Python
turtle库的几个案例进阶,代码可直接运行(python经典编程案例)
该文章展示了使用Python的turtle库进行绘图的进阶案例,包括绘制彩色圆形和复杂图案的代码示例。
3149 6
turtle库的几个案例进阶,代码可直接运行(python经典编程案例)
|
12月前
|
Python
turtle库的几个简单案例,代码可直接运行(python经典编程案例)
该文章提供了多个使用Python的turtle库绘制不同图形的简单示例代码,如画三角形、正方形、多边形等,展示了如何通过turtle进行基本的绘图操作。
1058 5
|
12月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
通过构建高效的后缀树,Python程序在处理大规模字符串数据时能够游刃有余,显著提升性能和效率。无论是学术研究还是工业应用,Suffix Tree都是不可或缺的强大工具。
151 6
|
12月前
|
存储 算法 数据挖掘
高效文本处理新纪元:Python后缀树Suffix Tree,让数据分析更智能!
在大数据时代,高效处理和分析文本信息成为关键挑战。后缀树作为一种高性能的数据结构,通过压缩存储字符串的所有后缀,实现了高效的字符串搜索、最长公共前缀查询等功能,成为文本处理的强大工具。本文探讨Python中后缀树的应用,展示其在文本搜索、重复内容检测、最长公共子串查找、文本压缩及智能推荐系统的潜力,引领数据分析迈入新纪元。虽然Python标准库未直接提供后缀树,但通过第三方库或自定义实现,可轻松利用其强大功能。掌握后缀树,即掌握开启文本数据宝藏的钥匙。
140 5
|
12月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
209 2
|
12月前
|
存储 算法 搜索推荐
Python进阶必备:字典树Trie与后缀树Suffix Array,效率提升的神器!
在Python编程中,掌握高效的数据结构对于提升程序性能至关重要。本文将深入探讨两种强大的字符串处理数据结构——字典树(Trie)与后缀数组(Suffix Array)。字典树,又称前缀树,适用于自动补全和拼写检查等功能。例如,在文本编辑器中实现自动补全时,字典树能够即时提供单词补全选项。后缀数组则用于存储字符串的所有后缀并按字典序排序,结合最长公共前缀(LCP)数组,可以高效解决许多字符串问题,如查找最长重复子串等。通过实际案例,我们将展示这两种数据结构的强大功能,帮助你在Python编程中更进一步。
199 2
|
12月前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
在编程领域,高效的数据结构对于解决问题至关重要。本文通过一个案例分析,介绍如何在Python中结合使用Trie树(前缀树)和Suffix Tree(后缀树)。案例聚焦于开发具备高效拼写检查和文本相似度检测功能的文本编辑器。首先,通过构建Trie树快速检查单词是否存在;接着,利用Suffix Tree检测文本相似度。尽管Python标准库未直接提供Suffix Tree,但可通过第三方库或自定义实现。本文展示了高级数据结构在实际应用中的强大功能,并强调了理论与实践相结合的重要性。
133 1
|
12月前
|
存储 算法 Python
逆袭之路:掌握Python字典树Trie与后缀树,成为技术圈的耀眼新星!
在编程的征途上,每个人都渴望成为那个能够独当一面、解决复杂问题的技术高手。而掌握高级数据结构,如字典树(Trie)与后缀树(Suffix Tree),无疑是你逆袭路上的重要一步。这些数据结构不仅能够提升你的编码技能,还能让你在解决特定问题时游刃有余,从而在技术圈中脱颖而出,成为那颗耀眼的新星。
102 1

热门文章

最新文章

推荐镜像

更多