Рисование этого шаблона с использованием модуля черепахи Python. Некоторые квадраты друг над другом, но наклонены как спираль - PullRequest
3 голосов
/ 14 июня 2019

Я новичок в программировании и читаю книгу «Как думать, как ученый». В четвертой главе говорится о функциях.

В конце главы есть упражнение, в котором меня просят нарисовать следующий шаблон с использованием модуля черепахи Python.

enter image description here

Я изучал эту картину и решил разбить ее на две части: 1) линии посередине и 2) квадраты, идущие друг на друга как спираль.

Я нарисовал первую часть, используя этот код:

import turtle

wn = turtle.Screen()  # Set up the window
wn.bgcolor("lightgreen")

alex = turtle.Turtle()  # Create Alex
alex.color("blue")
alex.pensize(3)

for i in range(20):  # Here I start drawing the lines
    alex.forward(100)
    alex.backward(100)
    alex.left(360/20)  # Fit 20 lines in the 360 degree circle

wn.mainloop()

Когда я запускаю его, он рисует это:

enter image description here

Затем я создал функцию draw_square и сумел нарисовать первый квадрат:

import turtle


def draw_square(turtle, size):
    for i in range(4):
        turtle.forward(size)
        turtle.left(90)


wn = turtle.Screen()  # Set up the window
wn.bgcolor("lightgreen")

alex = turtle.Turtle()  # Create Alex
alex.color("blue")
alex.pensize(3)

for i in range(20):  # Here I start drawing the lines
    alex.forward(100)
    alex.backward(100)
    alex.left(360/20)  # Fit 20 lines in the 360 degree circle

# In a messy way, using what I've learned, I move Alex to where he's supposed to be now
# I'm pretty sure there's a classier way to do this
alex.penup()
alex.backward(100)
alex.right(90)
alex.forward(100)
alex.left(90)
alex.pendown()

# Here I get Alex to draw the square
draw_square(alex, 200)

wn.mainloop()

Когда я запускаю его, он рисует это:

enter image description here

Теперь я застрял. Я не знаю, куда идти отсюда. Я не знаю, как рисовать все остальные квадраты. Я не могу понять, где разместить черепаху и на сколько градусов наклонить квадрат (вероятно, 20, как линии, но я не знаю, как это сделать) ... В любом случае, у вас, ребята, есть какие-то советы? Есть предложения?

Я стараюсь не пропускать никаких упражнений с книгой, и это помогло мне.

1 Ответ

3 голосов
/ 14 июня 2019

Отличная попытка, и спасибо за четкие изображения ожидаемого / фактического результата!

Шаблон на самом деле немного проще, чем вы думаете.Отдельный прямоугольник вытягивается из центра несколько раз, при этом черепаха слегка поворачивается в центральной точке на каждой итерации.Перекрытия сторон коробки создают иллюзию «спиц».

Что касается определения величины поворота в градусах, я взял 360 и разделил ее на количество спиц, показанных на рисунке (20), получив 18 градусов.

Вот код, который дает правильныйвыход.

import turtle

def draw_square(turtle, size):
    for i in range(4):
        turtle.forward(size)
        turtle.left(90)

if __name__ == "__main__":
    wn = turtle.Screen()
    wn.bgcolor("lightgreen")
    alex = turtle.Turtle()
    alex.color("blue")
    alex.pensize(3)
    boxes = 20

    for _ in range(boxes):
        draw_square(alex, 200)
        alex.left(360 / boxes)

    wn.mainloop()

Выход:

turtle

...