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

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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT从业者张某某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值