Просматривая книгу «Как думать, как ...», я застрял с упражнением 4.9.2.

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

enter image description here

Следующий код показывает, как далеко я дошел до сих пор:

import turtle
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle()

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

size = 20
for j in range(3):
   tess.pensize(3)
   draw_square(tess,size)
   size = size + 20
   tess.penup()
   tess.goto(-20, -20)
   tess.pendown()

wn.mainloop()

Может ли кто-то быть таким добрым и показать мне правильное направление, пожалуйста?

Спасибо!

Свен

-1
user3974939 12 Дек 2016 в 19:54

3 ответа

Лучший ответ

Проблема здесь:

tess.goto(-20, -20)

У вас есть две проблемы. Во-первых, если каждый квадрат на 20 единиц больше и вы смещаете каждый квадрат на (-20, -20), все квадраты будут иметь один угол. Вместо этого вы хотите сместить угол квадрата на (-10, -10), чтобы внутренний квадрат был смещен на 10 единиц со всех сторон.

Вторая проблема заключается в том, что .goto(x, y) устанавливает абсолютную позицию, а не смещение. Чтобы перейти к смещению, необходимо рассчитать новую абсолютную позицию на основе смещения:

tess.goto(tess.xcor()-10, tess.ycor()-10)

Или же

tess.goto(tess.pos() + (-10, -10))
1
Steven Rumbalski 12 Дек 2016 в 17:21
import turtle
def drawSquare (t, size):
    for i in range (4):
        t.forward(size)
        t.left(90)

def main():
    wn = turtle.Screen()
    wn.bgcolor('black')
    pat = turtle.Turtle()
    pat.pensize(2)
    pat.speed(10)
    pat.color('blue')
    space = -10

    for i in range(20, 105, 20):
        drawSquare(pat,i)
        pat.up()
        pat.goto(space, space)
        pat.down()
        space = space - 10
    wn.exitonclick()
main()
0
wolf220 9 Ноя 2019 в 23:30

Иногда, когда вы застряли, хороший подход к графике черепах - это мыслить за пределами квадрата . Если мы рассматриваем желаемый результат как плохо нарисованные концентрические круги, то проблема сводится к:

from turtle import Turtle, Screen

HYPOTENUSE = (2 ** 0.5) / 2

screen = Screen()
screen.bgcolor("lightgreen")

tess = Turtle()
tess.pencolor("red")
tess.setheading(45)
tess.width(3)

for radius in range(20, 20 * 5 + 1, 20):
    tess.penup()
    tess.goto(radius/2, -radius/2)
    tess.pendown()
    tess.circle(radius * HYPOTENUSE, steps=4)

screen.exitonclick()

< Сильный > OUTPUT

enter image description here

0
cdlane 12 Дек 2016 в 18:39