如何用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()
关键修改点
- 移动颜色生成逻辑:将
r = random.randrange(256)等三行代码从循环外移到for _ in range(8)循环内部,确保每片花瓣都有独立的随机颜色。 - 删除多余循环:移除
draw_leaf函数中for _ in range(8)的循环,避免重复触发begin_fill导致填充错误。
内容的提问来源于stack exchange,提问作者Maybe
相关产品推荐
相关产品推荐

