R. Sweet R. Sweet - 1 month ago 22
Python Question

Python turtle color

Hey I have to make a program in python that takes input from the user for number of rows, columns, square side length, and three colors. Then the program must make a grid according to the number of rows and columns, and fill in the squares in an alternating checker pattern. I have it coded up to the point where it fills in the colors, and i was wondering if anyone could help me. Here's what i have so far:

from turtle import *
t = Turtle()
screen = t.getscreen()

rows = screen.numinput('Number of rows',
'How many rows shall there be?', 5, 1, 10)
columns = screen.numinput('Number of columns',
'How many columns shall there be?', 5, 1, 10)
side_length = screen.numinput('Length of square side',
'How long shall the square sides be?', 30, 10, 50)
first_color = screen.textinput('First color',
'What shall the first color be?')
second_color = screen.textinput('Second color',
'What shall the second color be?')
third_color = screen.textinput('Third color',
'What shall the third color be?')

square_color = ''


def draw_square():
t.begin_fill()
t.pendown()
t.forward(side_length)
t.left(90)
t.forward(side_length)
t.left(90)
t.forward(side_length)
t.left(90)
t.forward(side_length)
t.color(square_color)
t.end_fill()
t.penup()
t.color('black')
t.left(90)
t.forward(side_length)



def draw_board():
n = 1
for i in range(int(columns)):
draw_square()
for x in range(int(rows - 1)):
t.goto(0,side_length * n)
for i in range(int(columns)):
draw_square()
n += 1
for i in range(int(columns)):
for x in range(int(rows)):
if x + i % 3 == 0:
square_color = first_color
elif x + i % 3 == 1:
square_color = second_color
elif x + i % 3 == 2:
square_color = third_color
draw_board()
done()

Answer

You have all the code you need, in fact too much. You just don't have it assembled correctly. You need to think of your program as a story and tell that story in the correct order of events such that the story makes sense. Below is my rework of your code to put things in a better order along with some style tweaks and code cleanup:

from turtle import Turtle, Screen

def draw_square(turtle, length, color):
    turtle.color(color)
    turtle.pendown()

    turtle.begin_fill()
    for _ in range(4):
        turtle.forward(length)
        turtle.left(90)
    turtle.end_fill()

    turtle.penup()
    turtle.forward(length)

def draw_board(turtle, length, colors):
    n = 0

    for row in range(int(rows)):
        turtle.goto(0, length * n)
        for column in range(int(columns)):
            square_color = colors[(column + row) % len(colors)]
            draw_square(turtle, length, square_color)
        n += 1

screen = Screen()

rows = screen.numinput('Number of rows', 'How many rows shall there be?', 5, 1, 10)
columns = screen.numinput('Number of columns', 'How many columns shall there be?', 5, 1, 10)
side_length = screen.numinput('Length of side', 'How long shall the square sides be?', 30, 10, 50)

first_color = screen.textinput('First color', 'What shall the first color be?')
second_color = screen.textinput('Second color', 'What shall the second color be?')
third_color = screen.textinput('Third color', 'What shall the third color be?')

colors = [first_color, second_color, third_color]

turtle = Turtle()
turtle.penup()

draw_board(turtle, side_length, colors)

turtle.hideturtle()

screen.exitonclick()

PRODUCES:

enter image description here