Новое в Python: шахматная доска Turtle из 25 квадратов с использованием циклов

def main():
    square(0,0,50,'red')


def square(x,y,width,color):  

    turtle.penup()  
    turtle.goto(0,0)  
    turtle.fillcolor(color)  
    turtle.pendown()  
    turtle.begin_fill()

    for number in range(5):
        for count in range(4):
            turtle.forward(width)
            turtle.left(90)
        turtle.end_fill()
        x = x+50
        turtle.goto(x,y)


    turtle.showturtle()

Вызов основной функции

main()

Это дает мне одну строку из 5 квадратов. Как мне закодировать внешний цикл, чтобы нарисовать еще 4 строки из таких 5 квадратов - шахматную доску 5 на 5?


person user8163495    schedule 16.10.2017    source источник


Ответы (2)


Я упростил вашу «квадратную» функцию, чтобы нарисовать только один квадрат. Затем я добавил отдельную функцию, которая включала вложенный цикл, вызывающий функцию квадрата. Попытка сделать это простым и иметь только одну ответственность за каждую функцию:

import turtle

def main():
    board(5, 5, 50)
    input("Hit enter to close")

def square(x,y,width,color):
    turtle.penup()  
    turtle.fillcolor(color)  
    turtle.goto(x, y)
    turtle.pendown()
    turtle.begin_fill()
    for side in range(4):
        turtle.forward(width)
        turtle.left(90)
    turtle.end_fill()

def board(rows, columns, square_width):
    turtle.showturtle()
    for row in range(rows):
        for column in range(columns):
            color = "red" if (row + column)%2 == 1 else "white"
            square(row*square_width, column*square_width, square_width, color)
    turtle.hideturtle()
person RobertB    schedule 16.10.2017

У вас уже есть код для рисования ряда квадратов, это цикл, который у вас есть прямо сейчас.

Вы хотите, чтобы этот код запускался 5 раз, поэтому просто заверните его в другой цикл, не забывая изменять переменные по мере необходимости. Что-то в этом роде:

for i in range(5):  
    for number in range(5):
        for count in range(4):
            turtle.forward(width)
            turtle.left(90)
        turtle.end_fill()
        x += width
        turtle.goto(x,y)
    x -= 5*width
    y += width

Также обратите внимание на стиль: square() игнорирует большинство своих параметров. Вы жестко кодируете свою черепаху, чтобы перейти к (0,0), независимо от значений x и y. Поскольку ваши более поздние goto используют эти значения, ваш код сломается, если вы установите для них значение, отличное от 0. Ваша строка x = x+50 также игнорирует значение width, даже если линия, которую рисует черепаха, использует его. Опять же, если вы установите значение, отличное от 50, это сломается.

person Kirill    schedule 16.10.2017