Home > Net >  Need help making every petal on a flower a different color
Need help making every petal on a flower a different color

Time:12-06

How do make every petal on a flower a different color?

I tried doing this but it resulted in every flower petal being the same color. Im not sure how I can make every flower petal a different color.

import turtle
import random

not_done = False # guarantees the flower is completely drawn and won't be affected by subsequent button clicks

def set_up():
    """ sets up the screen with a title and adds the mouse listener"""
    wn = turtle.Screen()
    wn.bgcolor("pink")
    wn.title("Python Turtle Graphics: Flower Garden")

    turtle.delay(0)
    turtle.penup()
    turtle.setpos(-200, 250)    # write a large title
    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):
    """ draws 1 leaf and fills it if fill is true"""
    # todo
    leaf.hideturtle()
    turtle.colormode(255)

    for _ in range(8):
        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):
    """ draws a flower at (x,y)"""
    global not_done
    if not_done:    # function does not execute if still drawing
        return
    not_done = True
    # todo
    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)
    r = random.randrange(256)
    g = random.randrange(256)
    b = random.randrange(256)

    for _ in range(8):
        leaf.penup()
        leaf.setpos(x, y)
        leaf.pendown()
        draw_leaf(fill, r, g, b)
        leaf.rt(45)


    not_done = False # finished drawing the flower - don't add any code below

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

main()

I was told I could use a loop however I'm able to fully understand what that would look like. This is my first post here so sorry for the spam earlier.

CodePudding user response:

You need to change the color for each leaf, i.e. move the color generation into the loop:

    for _ in range(8):
        fill = random.randint(0, 1)
        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)
  • Related