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

如何简化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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:42