这段代码使用Python turtle模块,利用递归的方式绘制出了5棵樱花树的效果,并在画布上添加了一段文字。主要实现过程如下:
- 定义了一个名为“Tree(branch, t)”的函数,该函数用于绘制樱花树的躯干和分支。在函数中,通过对画笔颜色、画笔粗细和旋转角度进行设置,使得每次调用自身(递归)时都会绘制出两个较小的分支,最终形成完整的樱花树形状。
- 初始化画笔对象t,并设置画布大小、背景图片等参数。然后,通过多次调用“Tree()”函数并调整画笔位置和角度,依次绘制出5棵樱花树。
- 最后,将画笔抬起并移动到适当的位置,使用“write()”函数在画布上写入一段文本。并通过监听画布点击事件,让程序等待用户点击画布后退出,结束整个绘图过程。
一、方法步骤
二、代码实现
import turtle as T  # 引入 turtle 库并起一个别名 T
import random  # 引入 random 库
import time  # 引入 time 库
# 画樱花的躯干(60,t)
def Tree(branch, t):
    time.sleep(0.0005)  # 使程序暂停 0.0005 秒,以便视觉效果
    if branch > 3:
        if 8 <= branch <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')  # 白色
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branch / 3)
        elif branch < 8:
            if random.randint(0, 1) == 0:
                t.color('snow')  # 白色
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branch / 2)
        else:
            t.color('sienna')  # 赭(zhě)色
            t.pensize(branch / 10)  # 笔画宽度为枝干长度的 1/10
        t.forward(branch)  # 前进 branch 的距离
        a = 1.5 * random.random()  # 随机调整角度
        t.right(20 * a)  # 向右旋转一定角度
        b = 1.5 * random.random()  # 随机分支长度
        Tree(branch - 10 * b, t)  # 递归调用自身,绘制左侧小树枝
        t.left(40 * a)  # 向左旋转一定角度
        Tree(branch - 10 * b, t)  # 递归调用自身,绘制右侧小树枝
        t.right(20 * a)  # 向右旋转回原方向
        t.up()  # 抬起画笔
        t.backward(branch)  # 后退 branch 的距离
        t.down()  # 落下画笔,准备绘制下一个小树枝
# 绘图区域
t = T.Turtle()  # 初始化画笔 t
# 画布大小
w = T.Screen()  # 初始化画布 w
t.hideturtle()  # 隐藏画笔
t.getscreen().tracer(5, 0)  # 设置画笔的行进速度和动画开关状态,使得画笔更加流畅
w.bgpic('6a450a1da14f33a44582542240f48b(1).png')  # 使用背景图片作为画布的背景
t.left(90)  # 向左旋转 90 度
t.up()  # 抬起画笔
t.backward(150)  # 后退 150 的距离
t.down()  # 落下画笔
t.color('sienna')  # 设置画笔颜色为赭(zhě)色
# 画第一棵樱花树
Tree(70, t)  # 枝干长度为 70
Tree(60, t)  # 枝干长度为 60
Tree(40, t)  # 枝干长度为 40
# 画第二棵樱花树
t.up()  # 抬起画笔
t.goto(-350, -300)  # 定位画笔位置
t.setheading(90)  # 设置画笔朝向
t.color('sienna')  # 设置画笔颜色为赭(zhě)色
t.down()  # 落下画笔
Tree(60, t)  # 枝干长度为 60
# 画第三棵樱花树
t.up()  # 抬起画笔
t.goto(350, -300)  # 定位画笔位置
t.setheading(90)  # 设置画笔朝向
t.color('sienna')  # 设置画笔颜色为赭(zhě)色
t.down()  # 落下画笔
Tree(40, t)  # 枝干长度为 40
# 画第四棵樱花树
t.up()  # 抬起画笔
t.goto(300, -300)  # 定位画笔位置
t.setheading(90)  # 设置画笔朝向
t.color('sienna')  # 设置画笔颜色为赭(zhě)色
t.down()  # 落下画笔
Tree(40, t)  # 枝干长度为 40
Tree(20, t)  # 枝干长度为 20
# 画第五棵樱花树
t.up()  # 抬起画笔
t.goto(300, -300)  # 定位画笔位置
t.setheading(90)  # 设置画笔朝向
t.color('sienna')  # 设置画笔颜色为赭(zhě)色
t.down()  # 落下画笔
Tree(20, t)  # 枝干长度为 20
# 绘制文本
t.up()  # 抬起画笔
t.goto(0, -300)  # 定位文本位置
t.color('white')  # 设置文本颜色为白色
t.write("愿我们向上生长,如花一般灿烂!!!", align="center", font=("华文楷体", 30, "bold"))  # 绘制文本
w.exitonclick()  # 点击画布可退出程序
三、代码解释
 四、优化代码
import turtle as T
import random
import time
# 画樱花的躯干(60,t)
def Tree(branch, t):
    time.sleep(0.0005)
    if branch > 3:
        if 8 <= branch <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')  # 白
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branch / 3)
        elif branch < 8:
            if random.randint(0, 1) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branch / 2)
        else:
            t.color('sienna')  # 赭(zhě)色
            t.pensize(branch / 10)  # 6
        t.forward(branch)
        a = 1.5 * random.random()
        t.right(20 * a)
        b = 1.5 * random.random()
        Tree(branch - 10 * b, t)
        t.left(40 * a)
        Tree(branch - 10 * b, t)
        t.right(20 * a)
        t.up()
        t.backward(branch)
        t.down()
# 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
t.hideturtle()  # 隐藏画笔
t.getscreen().tracer(5, 0)
w.bgpic('6a450a1da14f33a44582542240f48b(1).png')
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')
# 定义绘制樱花树的函数
def draw_tree(x, height, t):
    t.up()
    t.goto(x, -300)
    t.setheading(90)
    t.color('sienna')
    t.down()
    Tree(height, t)
# 绘制五棵樱花树
draw_tree(-400, 65, t)
draw_tree(-250, 50, t)
draw_tree(-10, 30, t)
draw_tree(-50, 40, t)
draw_tree(0, 45, t)
draw_tree(100, 40, t)
draw_tree(200, 30, t)
draw_tree(300, 38, t)
draw_tree(400, 30, t)
draw_tree(500, 38, t)
draw_tree(600, 45, t)
# 绘制文本
t.up()
t.goto(0, -300)
t.color('white')
t.write("愿我们向上生长,如花一般灿烂!!!", align="center", font=("华文楷体", 30, "bold"))
w.exitonclick()
第二版代码在第一版的基础上做了以下修改:
- 将绘制樱花树的代码抽象成一个函数,减少了代码的重复性,提高了代码的复用性。
- 增加了更多的樱花树,让场景更加丰富。
- 定义了更加清晰的函数参数,增强了代码的可读性。
- 删除了一些冗余的代码,使得代码更加简洁明了。
五、Python turtle模块介绍
Python turtle模块是一个图形化编程工具,可以在屏幕上绘制各种图形。使用turtle模块可以方便快捷地实现基础的图形绘制和动画效果,非常适合用于教育、艺术设计等领域的开发和学习。
在turtle模块中,通过创建一个代表“画笔”的turtle对象,并使用该对象的各种方法来控制移动、旋转、绘制等行为,最终实现所需的图形效果。同时,turtle模块还提供了许多有用的功能,如颜色和线条粗细设置、图案填充、文本输出等等。
除了直接使用Python的turtle模块外,还可以使用一些基于turtle模块封装的第三方库,如pygal、turtle-graph、turtleplot等。这些库提供了更加丰富的功能和更加易于使用的接口,可以方便地实现各种复杂图形的绘制和动画效果。
六、Python turtle模块使用方法
import turtle
# 创建屏幕和画笔对象
screen = turtle.Screen()
t = turtle.Turtle()
# 向前移动10个像素单位
t.forward(10)
# 向后移动10个像素单位
t.backward(10)
# 向左旋转90度
t.left(90)
# 向右旋转90度
t.right(90)
# 设置画笔颜色为红色
t.color("red")
# 设置画笔粗细为5个像素单位
t.pensize(5)
# 设置画笔填充颜色为蓝色
t.fillcolor("blue")
# 在屏幕上绘制一个正方形
for i in range(4):
    t.forward(100)
    t.left(90)
# 在屏幕上绘制一个圆形
t.circle(50)
# 设置画布的背景颜色为白色
screen.bgcolor("white")
# 设置画布的大小为800x600像素单位
screen.setup(800, 600)
# 隐藏画笔
t.hideturtle()
本篇文章介绍了一种使用Python绘制樱花树的方法,主要使用了turtle模块。文章详细讲述了代码的实现过程,并提供了第二版代码和代码解释,以及Python turtle模块的介绍和使用方法。其中包括创建画布和画笔对象、控制画笔移动和旋转、控制画笔外观以及绘制基本图形等操作。同时,还介绍了一些控制画布参数的方法,如设置背景图片、隐藏画笔等。通过这篇文章,读者可以了解到如何使用turtle模块实现绘图,并能够尝试自己绘制出各种有趣的图形。