2016-02-23 37 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