求助:Python递归Turtle绘制深度3的分形树(正方形层级)问题
修复你的递归海龟分形树代码
嘿,我一眼就看到问题所在啦,你的海龟没动主要是几个关键的代码顺序和缺失问题,咱们一步步搞定:
核心问题分析
turtle.exitonclick()放错位置了:这行代码会让程序卡在等待用户点击退出的状态,你把它放在创建海龟和调用绘制函数之前,导致后面的代码完全没机会执行,海龟当然一动不动!- 缺少变量定义:你调用
squares(turt, length, depth)时,length和depth这两个变量根本没赋值,就算前面的代码执行了也会报错。 - 递归函数未实现:你的
squares函数只写了个开头,没有具体的绘制和递归逻辑,自然没法画出分形。
修复后的完整代码
下面是针对depth=3的正方形分形树的完整实现,我还加了注释方便你理解:
import turtle def squares(t, length, depth): # 递归终止条件:深度为0时停止绘制 if depth == 0: return # 绘制当前层级的正方形 for _ in range(4): t.forward(length) t.right(90) # 移动到当前正方形的右侧中间位置,准备绘制下一层的小正方形 t.penup() t.forward(length) t.right(90) t.forward(length / 2) t.left(90) t.pendown() # 递归绘制右侧的小正方形:深度减1,边长缩小为原来的一半 squares(t, length * 0.5, depth - 1) # 回到当前正方形的左侧中间位置,绘制另一侧的小正方形 t.penup() t.left(90) t.forward(length) t.right(90) t.backward(length) t.pendown() # 递归绘制左侧的小正方形 squares(t, length * 0.5, depth - 1) # 回到当前正方形的起始位置,方便后续递归回溯 t.penup() t.forward(length) t.right(90) t.forward(length / 2) t.left(90) t.pendown() def main(): turtle.speed(0) # 最快绘制速度 turtle.screensize(1000, 1000) # 设置画布大小 # 创建海龟对象 turt = turtle.Turtle() # 定义初始边长和递归深度 initial_length = 200 depth = 3 # 调用递归绘制函数 squares(turt, initial_length, depth) # 最后等待用户点击再退出,这次位置对了! turtle.exitonclick() if __name__ == "__main__": main()
关键调整说明
- 调整了
exitonclick()的位置:现在它在所有绘制逻辑之后,确保海龟先完成分形绘制,再等待用户退出。 - 补充了变量定义:添加了
initial_length(初始正方形边长)和depth=3,符合你的需求。 - 实现了递归逻辑:
- 每次递归先绘制当前层级的正方形,再移动到合适位置绘制下一层级的小正方形。
- 递归终止条件保证深度到0时停止,避免无限递归。
- 缩放比例(
length * 0.5)你可以根据自己的分形图调整,比如改成0.6会让小正方形更大一些。
如果你的分形树是每个正方形的四个角都有小正方形,只需要修改递归前的移动逻辑,调整到四个角的位置即可~
内容的提问来源于stack exchange,提问作者Alden
相关产品推荐
相关产品推荐

