当前位置:首页>python>Python实战项目之樱花树

Python实战项目之樱花树

  • 2026-09-02 19:47:46
Python实战项目之樱花树

在Python中绘制动态樱花树,主要依靠turtle绘图库实现。turtle是Python内置的图形绘制库,无需额外安装,语法简单直观,非常适合用来实现分形树、自然景物等递归图形。

本文将从环境准备、核心原理、分步实现、代码逐行解析、效果优化五个维度,完整讲解樱花树的实现过程,确保零基础也能看懂并运行。

一、前期准备

1.1 开发环境

- Python 3.x(推荐3.6及以上版本)

- 内置库: turtle 、 random (无需pip安装)

- 编辑器:VS Code、PyCharm、IDLE均可

1.2 核心原理

樱花树本质是分形递归结构:

1. 树干向上生长,到一定长度后分叉;

2. 左右树枝重复树干的生长逻辑,形成递归;

3. 树枝末端绘制粉色花瓣,模拟樱花;

4. 加入随机角度、长度,让树木更自然。

递归公式:

plaintext  

树 = 树干 + 左子树 + 右子树

子树 = 更短的树干 + 更小的左子树 + 更小的右子树

二、分步实现过程

第一步:导入库并初始化画布

首先导入 turtle 和 random ,设置画布大小、标题、速度。

第二步:定义递归绘制树枝函数

递归是核心:

- 前进绘制树枝

- 右转一定角度,递归画右枝

- 左转双倍角度,递归画左枝

- 回退到原点,恢复角度

第三步:绘制樱花花瓣

当树枝长度小于阈值时,停止递归,绘制圆形粉色花瓣。

第四步:美化优化

- 调整颜色:树干棕色、花瓣粉色渐变

- 加入随机角度:避免树木僵硬

- 加速绘制:关闭动画延迟

- 隐藏海龟箭头:提升美观度

第五步:运行主程序

调用递归函数,启动绘图循环,保持窗口不关闭。

三、完整代码

python  

# -*- coding: utf-8 -*-

import turtle

import random

from time import sleep

# 1. 初始化画布设置

window = turtle.Screen()

window.setup(1.0, 1.0, 0, 0)  # 全屏显示

window.title("Python樱花树")

window.bgcolor("#f0f0f0")     # 浅灰色背景

turtle.speed(0)               # 最快绘制速度

turtle.pensize(1)             # 画笔粗细

turtle.hideturtle()           # 隐藏画笔箭头

turtle.color("#8B4513")       # 初始颜色:树干棕色

turtle.left(90)               # 初始方向向上

turtle.penup()

turtle.backward(300)          # 向下移动起点

turtle.pendown()

# 2. 随机数控制自然效果

def random_angle():

    return random.randint(10, 30)

def random_length():

    return random.randint(5, 15)

def random_color():

    colors = ["#FFB6C1", "#FFC0CB", "#FF69B4", "#FF1493", "#FF82AB"]

    return random.choice(colors)

# 3. 递归绘制樱花树

def draw_tree(branch_len):

    sleep(0.0001)

    if branch_len > 15:

        # 绘制主干

        turtle.forward(branch_len)

        # 右侧树枝

        turtle.right(random_angle())

        draw_tree(branch_len - random_length())

        # 左侧树枝

        turtle.left(2 * random_angle())

        draw_tree(branch_len - random_length())

        # 回退复位

        turtle.right(random_angle())

        turtle.backward(branch_len)

    else:

        # 绘制樱花花瓣

        turtle.color(random_color())

        turtle.begin_fill()

        turtle.circle(3)

        turtle.end_fill()

        turtle.color("#8B4513")

# 4. 启动绘制

draw_tree(90)

# 5. 保持窗口

turtle.done()

四、代码逐行深度解析

4.1 库导入部分

python  

import turtle

import random

from time import sleep

-  turtle :绘图核心库,控制画笔移动、旋转、颜色;

-  random :生成随机角度、长度、颜色,让树自然不呆板;

-  sleep :微秒延迟,控制绘制节奏。

4.2 画布初始化

python  

window = turtle.Screen()

window.setup(1.0, 1.0, 0, 0)

window.title("Python樱花树")

window.bgcolor("#f0f0f0")

-  Screen() 创建绘图窗口;

-  setup(1.0,1.0) 实现全屏显示;

- 背景色设为浅灰,突出粉色樱花。

python  

turtle.speed(0)

turtle.pensize(1)

turtle.hideturtle()

turtle.left(90)

turtle.penup()

turtle.backward(300)

turtle.pendown()

-  speed(0) :最快绘制模式;

-  left(90) :默认向右,左转90度向上生长;

- 向后移动300:让树长在屏幕中下部,更美观。

4.3 随机函数

python  

def random_angle(): return random.randint(10,30)

def random_length(): return random.randint(5,15)

- 角度10~30度:树枝分叉自然;

- 每次减5~15长度:树枝逐级变短。

python  

def random_color():

    colors = ["#FFB6C1","#FFC0CB","#FF69B4","#FF1493","#FF82AB"]

    return random.choice(colors)

- 粉色系十六进制色值,模拟樱花渐变。

4.4 递归核心函数

python  

def draw_tree(branch_len):

    sleep(0.0001)

    if branch_len > 15:

        turtle.forward(branch_len)

        turtle.right(random_angle())

        draw_tree(branch_len - random_length())

        turtle.left(2 * random_angle())

        draw_tree(branch_len - random_length())

        turtle.right(random_angle())

        turtle.backward(branch_len)

1. 长度>15时继续分叉,否则画花;

2. 前进画树枝 → 右转画右枝 → 左转双倍画左枝;

3. 回退复位,保证递归正确回溯。

python  

else:

    turtle.color(random_color())

    turtle.begin_fill()

    turtle.circle(3)

    turtle.end_fill()

    turtle.color("#8B4513")

- 小圆形填充粉色,模拟樱花;

- 画完恢复棕色,继续画其他树枝。

4.5 启动与保持窗口

python  

draw_tree(90)

turtle.done()

- 初始树干长度90,可自行调整;

-  done() 防止窗口一闪而逝。

五、运行效果说明

运行后:

1. 屏幕底部向上生长出棕色树干;

2. 逐级分叉,越来越细;

3. 细枝末端出现密集粉色樱花;

4. 整棵树呈自然分形结构,无人工僵硬感。

六、自定义优化扩展

6.1 调整树大小

修改:

python  

draw_tree(90)   # 越大树越高

draw_tree(60)   # 越小树越矮

6.2 花瓣大小

python  

turtle.circle(3)  # 数字越大花越大

6.3 背景色改为夜晚

python  

window.bgcolor("black")

6.4 加入飘落效果

可通过 tracer(0,0) 和 update() 实现动态飘落,进阶版本可实现风吹樱花动画。

七、总结

本文完整实现了Python+turtle樱花树,核心是递归分形结构。

- 代码量少、逻辑清晰、适合入门;

- 可自由修改参数,实现不同风格樱花树;

- 是学习递归、图形编程的经典案例。

最新文章

随机文章