Помимо отступов, здесь есть некоторые проблемы, которые указывают на то, что вы могли скопировать часть этого кода случайным образом откуда-то, не обращая пристального внимания на то, что он делает.Например, это для цикла:
for i in range(2):
turtle.fd(w)
turtle.left(90)
turtle.fd(h)
turtle.left(90)
содержит переменные w
и h
, но они не определены в вашем коде.Давайте сначала разберемся, как нарисовать квадрат.Черепаха должна сделать два шага:
- Перейти к заданной координате (x, y)
- Отследить форму квадрата, сделав четыре поворота на 90 градусов.
Чтобы перейти к координате, ничего не рисуя, мы должны поднять ручку с помощью turtle.penup()
, перейти туда с помощью turtle.goto()
и опустить ручку с помощью turtle.pendown()
.Итак, ваш draw_square
должен выглядеть примерно так:
def draw_square(x, y, width):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.forward(width)
turtle.right(90)
turtle.forward(width)
turtle.right(90)
turtle.forward(width)
turtle.right(90)
turtle.forward(width)
turtle.right(90)
Далее, давайте посмотрим на этот второй цикл for, который вы написали:
x = 0
y = -200
for i in range(100):
color = colorsys.hsv_to_rgb(x, 1, 1)
turtle.pencolor(color)
draw_square(x, y)
x += .01
y += 10
У вас есть несколько правильная идея.Начните с координат x, y, обновляйте их в каждой итерации, обновляйте цвет и рисуйте квадрат.Однако есть несколько проблем.Прежде всего, в то время как x должен увеличиваться, y должен фактически уменьшаться .Это связано с тем, что при переходе от верхней части экрана к нижней части значение y уменьшается.Во-вторых, величина, на которую они должны измениться, должна быть равна, так как квадраты концентрически.
Давайте определим step
, то есть расстояние между квадратами width
, размер квадрата,начальная позиция, и мы должны убедиться, что hue
увеличивается намного медленнее, чем x и y.
step = 3 # distance between squares
width = 600 #width of the biggest square
x, y = -width / 2, width / 2
hue = 0
for i in range(100):
color = colorsys.hsv_to_rgb(hue, 1, 1)
turtle.pencolor(color)
draw_square(x, y, width)
x += step
y -= step
width -= 2 * step
hue += 0.01