В вашем коде есть пара вложенных циклов. Однако, учитывая способ рисования сетки, вам действительно нужны три вложенных цикла. Пытаясь вычислить наименьшее количество кода, чтобы добраться из того места, где вы находитесь, туда, где вы хотите быть, я придумал следующее:
from turtle import Screen, Turtle
def draw_square(turtle, size, num):
for y in range(num):
for x in range(num):
for _ in range(4):
turtle.forward(size)
turtle.left(90)
turtle.forward(size)
parity = y % 2 == 0
turn = turtle.left if parity else turtle.right
turn(90)
turtle.forward(size * 2 * parity)
turn(90)
screen = Screen()
yertle = Turtle(visible=False)
yertle.speed('fastest') # because I have no patience
draw_square(yertle, 25, 20)
screen.exitonclick()
Этот код неэффективен с точки зрения рисования, поскольку одни и те же линии перерисовываются, чего следует избегать. Мое личное любимое решение этой проблемы — мой подход Tholian Web с использованием генераторов:
from turtle import Turtle, Screen
UNIT_SIZE, GRID_SQUARES = 25, 20
GRID_SIZE = GRID_SQUARES * UNIT_SIZE
def half_grid(turtle):
speed = turtle.speed()
for brick in range(GRID_SQUARES):
direction = [turtle.right, turtle.left][brick % 2 == 1]
for _ in range(0, GRID_SIZE, speed):
turtle.forward(speed)
yield(0)
direction(90)
for _ in range(0, UNIT_SIZE, speed):
turtle.forward(speed)
yield(0)
direction(90)
for _ in range(0, GRID_SIZE, speed):
turtle.forward(speed)
yield(0)
heckle = Turtle(shape='arrow')
heckle.speed(5) # speed needs to be a factor of UNIT_SIZE
heckle.penup()
heckle.goto(-GRID_SIZE / 2, -GRID_SIZE / 2)
heckle.pendown()
heckle.left(90)
jeckle = Turtle(shape='arrow')
jeckle.speed(5)
jeckle.penup()
jeckle.goto(GRID_SIZE / 2, -GRID_SIZE / 2)
jeckle.pendown()
jeckle.left(180)
generator1, generator2 = half_grid(heckle), half_grid(jeckle)
while (next(generator1, 1) + next(generator2, 1) < 2):
pass
heckle.hideturtle()
jeckle.hideturtle()
screen = Screen()
screen.exitonclick()
![введите здесь описание изображения](https://i.stack.imgur.com/H9BBy.png)
Но это, вероятно, излишне для ваших целей...
person
cdlane
schedule
20.03.2019