You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让嵌套绘制的正方形居中避免重叠?

如何让嵌套绘制的正方形居中避免重叠?

嘿,我来帮你搞定这个问题~ 你现在的代码之所以会让正方形重叠,是因为每次画完一个正方形后,你没有把海龟移动到下一个正方形的正确起始位置,所有正方形都在同一个原点绘制,自然就叠在一起啦。

先看看你尝试的代码和困惑:

This is what I've tried so far. I don't know how to center the squares so they are not getting one over the other.

import turtle

def square(t, sz):
    for i in range(4):
        t.color("hotpink")
        t.forward(sz)
        t.left(90)

wn = turtle.Screen()
wn.bgcolor("lightgreen")
alex = turtle.Turtle()
alex.pensize(3)
size = 10

for _ in range(5):
    square(alex, size)
    alex.penup()
    alex.right(90) 
    alex.left(90)
    alex.pendown()
    size += 20

你循环里的alex.right(90)接着alex.left(90)等于啥也没做,海龟还停在原来的位置,所以每次都原地画更大的正方形,肯定会重叠。

要让所有正方形居中嵌套,我们需要在画完每个正方形后,把海龟移动到下一个正方形的起始点——这个起始点要保证新正方形的中心和之前的完全一致。因为你每次把正方形边长增加20,所以每次需要让海龟向左、向下各移动10(20的一半),这样新正方形就能完美套在旧正方形外面,中心重合啦。

修改后的代码如下:

import turtle

def square(t, sz):
    for i in range(4):
        t.color("hotpink")
        t.forward(sz)
        t.left(90)

wn = turtle.Screen()
wn.bgcolor("lightgreen")
alex = turtle.Turtle()
alex.pensize(3)
size = 10

for _ in range(5):
    square(alex, size)
    # 抬笔准备移动位置
    alex.penup()
    # 当前方向向右,backward就是向左移动10
    alex.backward(10)
    # 左转90度,现在方向向上,backward就是向下移动10
    alex.left(90)
    alex.backward(10)
    # 右转90度回到初始向右的方向
    alex.right(90)
    alex.pendown()
    size += 20

wn.mainloop()  # 加上这句让窗口保持打开状态

关键步骤解释:

  • 每次画完正方形后,海龟会回到当前正方形的起始点,方向保持向右
  • 向左、向下各移动10后,新的起始点刚好能让下一个更大的正方形和之前的中心重合
  • 最后转回初始方向,放下笔就能画出不重叠的嵌套正方形啦

备注:内容来源于stack exchange,提问作者Cr1Tyzen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:49:33