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


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

相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
33 4
|
14天前
|
Python
Python笔下那些神奇的树
Python笔下那些神奇的树
|
1月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
|
1月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
17 3
|
1月前
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
19 2
|
2月前
|
算法 数据处理 索引
告别低效搜索!Python中Trie树与Suffix Tree的实战应用秘籍!
【7月更文挑战第21天】探索Python中的字符串搜索效率提升:使用Trie树与Suffix Tree。Trie树优化单词查询,插入和删除,示例展示其插入与搜索功能。Suffix Tree,复杂但强大,适用于快速查找、LCP查询。安装[pysuffixtree](https://pypi.org/project/pysuffixtree/)库后,演示查找子串及最长公共后缀。两者在字符串处理中发挥关键作用,提升数据处理效率。**
34 1
|
2月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
【7月更文挑战第19天】Suffix Tree 概述:** 为高效处理字符串搜索、匹配和大数据分析,后缀树是一种优化数据结构,可快速检索后缀、执行最长公共后缀查询及字符串排序。Python中虽无内置实现,但可通过第三方库或自建代码构造。应用于字符串搜索、生物信息学等领域,提升大数据处理效率。
34 3
|
2月前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
【7月更文挑战第19天】在编程实践中,Trie树和Suffix Tree优化了字符串处理。Trie树用于快速拼写检查,如在构建词库后,能高效判断单词是否存在。Suffix Tree则助力文本相似度检测,找寻共同子串。通过Python示例展示了Trie树插入和搜索方法,并指出Suffix Tree虽复杂但能提升性能。结合两者,实现复杂功能,展现数据结构的强大。
35 3
|
2月前
|
人工智能 算法 数据挖掘
高效文本处理新纪元:Python后缀树Suffix Tree,让数据分析更智能!
【7月更文挑战第20天】后缀树是文本处理的关键工具,它在Python中虽需第三方库支持(如pysuffixtree),但能高效执行搜索、重复内容检测等任务。应用于文本搜索、重复内容检测、生物信息学、文本压缩及智能推荐系统。随着AI和大数据发展,后缀树将在更多领域展现潜力,助力数据分析智能化和高效化。学习和利用后缀树,对于驾驭海量文本数据至关重要。**
36 1
下一篇
DDNS