海龟图形中的嵌套方块

问题描述 投票:0回答:2

我是 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命令,但没有成功

python turtle-graphics python-turtle
2个回答
0
投票

如果你想要这个输出:

绘制 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

我还建议学习如何进行调试,放置断点,然后一步步进行。你可以学习和了解更多。


0
投票

问题似乎可以归结为“围绕点 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)
© www.soinside.com 2019 - 2024. All rights reserved.