我是 python 的初学者,在学校里,我们有一个作业要创建一个程序,使用 for 循环创建 5 个嵌套正方形(正方形中心内的正方形 5 次)。我快要明白了,但我需要在正确的方向上推动。
import turtle
scrn = turtle.Screen()
scrn.screensize(500, 500)
scrn.bgcolor('green')
mike = turtle.Turtle()
mike.shape('turtle')
mike.color('pink')
mike.penup()
mike.goto(0, -20)
mike.pendown()
length = [20, 40, 60, 80, 100]
# Initialize the variable `x` before it is used.
x = 0
for i in range(5):
# Move the turtle forward 20 pixels.
mike.penup()
mike.forward(20)
mike.pendown()
# Draw a square with side length 20+x pixels.
for j in range(4):
mike.forward(20+x)
mike.left(90)
# Update the value of `x`.
x += length[j]
turtle.Screen().exitonclick()
我试图通过将每个数字写两次来稍微改变长度,但这使行变得更长而变得更糟(无法真正添加上下文,因为它发生在旧版本中)。我也尝试了turtle.goto命令,但没有成功
如果你想要这个输出:
绘制 1 个正方形:
for j in range(4):
mike.forward(side_length)
mike.left(90)
绘制 5 个不同的正方形:
side_length = 20
for i in range(5):
# drawing each squares
for j in range(4):
mike.forward(side_length)
mike.left(90)
# changing the starting position for bigger square
# starting position of the next square, left under corner
mike.penup()
mike.goto(mike.xcor() - 10, mike.ycor() - 10) # x-10, y-10 each time for bigger square
mike.pendown()
# increase the side length for the next square
side_length += 20
我还建议学习如何进行调试,放置断点,然后一步步进行。你可以学习和了解更多。
问题似乎可以归结为“围绕点 X、Y 画一个正方形”。 (甚至可以省略X、Y,以它为中心)。如果你能做到这一点,你就可以添加一个循环。
执行此操作的一种方法是从原点
size / 2
向前移动,然后向下 size / 2
,所有操作都将笔向上移动。这会将海龟定位在正方形的右下角。然后,您可以使用现有技术绘制一个正常的正方形。最后,提起笔并将乌龟重置回原来的航向和位置,以便准备绘制下一只乌龟。
import turtle
def draw_square(t, size):
t.penup()
# walk to the square's edge with the pen up
t.forward(size / 2)
t.right(90)
# walk to the square's corner along the edge
t.forward(size / 2)
t.right(90)
t.pendown()
# draw a normal square
for _ in range(4):
t.forward(size)
t.right(90)
# reposition the turtle back to where it started
t.penup()
t.forward(size / 2)
t.right(90)
t.forward(size / 2)
t.right(90)
t = turtle.Turtle()
for i in range(1, 6):
draw_square(t, 50 * i)
turtle.exitonclick()
您可以使用
goto
s 实现同样的目标:
def draw_square(t, size):
t.penup()
t.goto(size / 2, size / 2)
t.seth(-90)
t.pendown()
for _ in range(4):
t.forward(size)
t.right(90)
t.penup()
t.goto(0, 0)