You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Turtle实现花朵每片花瓣颜色不同?

解决Python Turtle花朵花瓣颜色统一的问题

你的代码里所有花瓣颜色相同,是因为随机颜色的生成代码放在了绘制花瓣的循环外面,导致8片花瓣复用同一组RGB值。只需要把颜色生成逻辑移到循环内部,每次绘制花瓣前都生成新的随机颜色即可。

另外,你的draw_leaf函数里有一段多余的for _ in range(8)循环,会重复执行begin_fill,这会导致填充异常,需要删除这段代码。

修改后的完整代码

import turtle
import random

not_done = False # 确保花朵绘制完成前不会被后续点击干扰

def set_up():
    """ 设置屏幕标题并添加鼠标监听器"""
    wn = turtle.Screen()
    wn.bgcolor("pink")
    wn.title("Python Turtle Graphics: Flower Garden")

    turtle.delay(0)
    turtle.penup()
    turtle.setpos(-200, 250)    # 绘制大标题
    turtle.color('green')
    turtle.write('Flower Garden', font = ('Courier', 40, 'bold'))
    turtle.onscreenclick(draw_flower)
    turtle.hideturtle()

leaf = turtle.Turtle()
stem = turtle.Turtle()

def draw_leaf(fill, r, g, b):
    """ 绘制一片叶子,fill为True时填充颜色"""
    leaf.hideturtle()
    turtle.colormode(255)

    if fill:
        leaf.begin_fill()
        leaf.fillcolor(r, g, b)

    for _ in range(45):
        leaf.fd(1)
        leaf.left(2)

    leaf.lt(90)

    for _ in range(45):
        leaf.fd(1)
        leaf.left(2)

    if fill:
        leaf.end_fill()

def draw_flower(x, y):
    """ 在(x,y)位置绘制花朵"""
    global not_done
    if not_done:    # 如果正在绘制则不执行
        return
    not_done = True

    stem.penup()
    stem.setposition(x, y)
    stem.width(5)
    stem.pendown()
    stem.hideturtle()
    stem.right(90)
    stem.forward(75)
    stem.seth(0)

    fill = random.randint(0, 1)

    # 把颜色生成移到循环内部,每次绘制花瓣都生成新颜色
    for _ in range(8):
        r = random.randrange(256)
        g = random.randrange(256)
        b = random.randrange(256)
        
        leaf.penup()
        leaf.setpos(x, y)
        leaf.pendown()
        draw_leaf(fill, r, g, b)
        leaf.rt(45)

    not_done = False # 绘制完成

def main():
    set_up()
    turtle.shape('turtle')
    turtle.speed(0)
    turtle.done()

main()

关键修改点

  1. 移动颜色生成逻辑:将r = random.randrange(256)等三行代码从循环外移到for _ in range(8)循环内部,确保每片花瓣都有独立的随机颜色。
  2. 删除多余循环:移除draw_leaf函数中for _ in range(8)的循环,避免重复触发begin_fill导致填充错误。

内容的提问来源于stack exchange,提问作者Maybe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:01:22