2016-02-23 11 views
0

Я пытаюсь написать функцию для рисования вложенных квадратов. Изображение должно состоять из 10 квадратов. Самая внешняя ширина - 200, каждая внутренняя - 20. Они расположены слева и сверху 5 друг от друга. Он должен начинаться с reset() и hideturtle() и использовать циклы. У меня возникают проблемы с установкой позиционирования для рисования каждого квадрата, так как черепахе нужно перемещаться вправо 5 пикселей и вниз по 5 пикселей для каждого. Функция должна вернуть изображение, которое выглядит следующим образом. Это то, что я до сих пор:Python Turtle: функция рисования левых вложенных квадратов

def ForTheSquares(t, center, side): 
    xPt =center[0]+(side-(side-5)) 
    yPt = center[0]-(side-(side-5)) 
    t.up() 
    t.goto(xPt, yPt) 
    t.down 
    for i in range(4): 
     t.forward(side) 
     t.right(90) 


def NestSquares(t, center, side): 
    if side <1: 
     return 
    ForTheSquares(t, center, side) 
    NestSquares(t, center, side-20) 


def main(): 
    t=turtle.Turtle() 
    NestSquares(t, [0,0], 200) 

Это моя цель:

Nested Squares Goal

Любая помощь будет очень признателен! Я новичок в кодировании и Python.

ответ

0

Посмотрите на алгебре в вашей начальной координаты:

xPt =center[0]+(side-(side-5)) 

Это сводится к

xPt = center[0] - 5 

... который не то, что вы хотите, верно?

Есть ли причина, по которой вы используете центр площади? Между прочим, вам не удалось переместить центральные координаты квадрата, когда вы рисуете следующий меньший квадрат.

Не было бы проще использовать левый верхний угол каждый раз (не в центре), а затем повторялись с

ForTheSquares(t, old_corner, side) 
new_corner = (old_corner[0]+5, old_corner[1]+5) 
NestSquares(t, new_corner, side-20) 

Конечно, вы также должны извлечь из этого северо-западном углу, но должно быть проще.

Этого достаточно, чтобы заставить вас двигаться?

0

Это еще одна программа, которая становится намного проще, если вы думаете о нем, как штамповкой проблему вместо рисунок проблемы:

import turtle 

turtle.reset() # not necessary but a stated requirement 
turtle.hideturtle() 

turtle.shape("square") 
turtle.fillcolor("white") 

for side in range(200, 0, -20): 
    turtle.shapesize(side/20) 
    turtle.stamp() 
    x, y = turtle.position() 
    turtle.setposition(x - 5, y + 5) 

turtle.exitonclick() 

Он работает от большого к малому, как иначе клейма бы затемнить друг друга:

enter image description here