如何简化Python Turtle图案代码,提升可读性并减少行数?
简化你的Turtle绘图代码
你的代码存在大量重复的"设置颜色+循环前进转向"逻辑,我们可以通过提取配置参数、复用执行代码的方式简化,同时完全保留原图案的绘制效果:
import turtle t = turtle.Turtle() t.speed(0) t.penup() t.setposition(120, 210) t.pendown() t.speed(5) t.width(2) length = 80 colors = ["purple", "blue", "green", "orange", "red"] # 定义每个绘制段的配置:(颜色索引, 循环次数, 转向方向, 转向判断条件) draw_steps = [ (0, 3, "right", lambda i: i % 3 != 0), (1, 2, "left", lambda i: i % 2 != 0), (2, 2, "right", lambda i: i % 2 != 0), (3, 2, "left", lambda i: i % 2 != 0), (4, 4, "right", lambda i: i % 4 != 0), (3, 2, "left", lambda i: i % 2 != 0), (2, 2, "right", lambda i: i % 2 != 0), ] # 遍历执行常规绘制步骤 for color_idx, loops, turn_dir, should_turn in draw_steps: t.color(colors[color_idx]) for i in range(1, loops + 1): t.forward(length) if should_turn(i): getattr(t, turn_dir)(90) # 处理最后一段特殊的蓝色绘制逻辑 t.color(colors[1]) for i in range(1, 3): t.forward(length) if i % 2 != 0: t.left(90) else: t.color(colors[0]) t.forward(length) t.right(90) turtle.done()
简化思路
- 提取重复逻辑:把每个颜色对应的循环次数、转向方向、转向条件打包成配置项,避免重复编写相同的for循环和转向判断代码
- 复用执行逻辑:通过外层循环遍历配置列表,统一调用前进和转向操作,大幅减少代码行数
- 保留特殊逻辑:最后一段蓝色绘制包含额外的颜色切换动作,单独保留以保证可读性(也可以扩展配置项将其纳入统一循环,如下)
如果想要进一步统一所有逻辑,可扩展配置项支持额外动作:
# 扩展配置,支持额外动作 draw_steps = [ (0, 3, "right", lambda i: i % 3 != 0, None), (1, 2, "left", lambda i: i % 2 != 0, None), (2, 2, "right", lambda i: i % 2 != 0, None), (3, 2, "left", lambda i: i % 2 != 0, None), (4, 4, "right", lambda i: i % 4 != 0, None), (3, 2, "left", lambda i: i % 2 != 0, None), (2, 2, "right", lambda i: i % 2 != 0, None), (1, 2, "left", lambda i: i % 2 != 0, lambda i: (t.color(colors[0]), t.forward(length), t.right(90)) if i == 2 else None) ] for color_idx, loops, turn_dir, should_turn, extra_action in draw_steps: t.color(colors[color_idx]) for i in range(1, loops + 1): t.forward(length) if should_turn(i): getattr(t, turn_dir)(90) if extra_action: extra_action(i)
内容的提问来源于stack exchange,提问作者Steven Anderman
相关产品推荐
相关产品推荐

