如何让嵌套绘制的正方形居中避免重叠?
如何让嵌套绘制的正方形居中避免重叠?
嘿,我来帮你搞定这个问题~ 你现在的代码之所以会让正方形重叠,是因为每次画完一个正方形后,你没有把海龟移动到下一个正方形的正确起始位置,所有正方形都在同一个原点绘制,自然就叠在一起啦。
先看看你尝试的代码和困惑:
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
相关产品推荐
相关产品推荐

