Python的一个优点是可以很容易地在解释器中测试小部分代码。让我们用翻译来检查两边的长度:In [82]: number_of_shapes = 4
In [83]: for shape in range(1, number_of_shapes + 1):
....: print(20 + shape * 10)
30
40
50
60
哦。现在我们可以清楚地看到forward(20 + shape * 10)不会使边的长度为20、40、60和80。注意,(20 + shape * 10)使边长增加了10。我们想增加20,所以使用(20 + shape * 20)代替:
^{pr2}$
哦,我搞错了。没问题,我们只需要把整件事减少20:In [85]: for shape in range(1, number_of_shapes + 1):
....: print(shape * 20)
....:
20
40
60
80
啊,好多了。在
现在代码如下:import turtle
number_of_shapes = 4
for shape in range(1, number_of_shapes+1):
#Draw a square
for sides in range(4):
turtle.forward(20 + shape * 20)
turtle.right(90)
#Move to position of next square
turtle.penup()
turtle.goto(shape * 10, shape * 10)
turtle.pendown()
turtle.mainloop()
运行此代码时,请注意turtle从左上角的每个方块开始
然后开始向右转。在
现在让我们考虑一下goto(shape * 10, shape * 10)语句。它把我们带到哪里去了?让我们用翻译来找出:In [87]: for shape in range(1, number_of_shapes + 1):
....: print(shape * 10, shape * 10)
....:
10 10
20 20
30 30
40 40
将这些坐标与上面的结果进行比较,可以看到乌龟正在向上和向右移动。每个方块的左上角开始高一点,向右一点。相反,我们希望每个新方块的左上角开始更高一点,并向左:In [88]: for shape in range(1, number_of_shapes + 1):
....: print(-shape * 10, shape * 10)
....:
-10 10
-20 20
-30 30
-40 40
让我们看看现在发生了什么:
宾果。在
顺便说一下,将left和right和{}等相对命令与goto这样的绝对命令混合使用需要。。。协调。数学很挑剔。
如果您坚持使用纯粹的相对命令,那么就不必费心去想goto坐标公式的正确性:turtle.penup()
turtle.left(90)
turtle.forward(10)
turtle.left(90)
turtle.forward(10)
turtle.left(180)
turtle.pendown()
使用纯相对命令的优点是,现在您可以将海龟放置在任何您想要的位置,具有任何初始标题,并且仍然可以绘制嵌套的正方形:import turtle
number_of_shapes = 4
turtle.setheading(45)
turtle.penup()
turtle.goto(20, 50)
turtle.pendown()
for shape in range(1, number_of_shapes+1):
#Draw a square
for sides in range(4):
turtle.forward(20 + shape * 20)
turtle.right(90)
#Move to position of next square
turtle.penup()
turtle.left(90)
turtle.forward(10)
turtle.left(90)
turtle.forward(10)
turtle.left(180)
turtle.pendown()
turtle.mainloop()