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

如何用循环简化Python Turtle绘制八角星的冗余代码?

简化Python Turtle八角星绘制代码

当然可以简化!你的代码里有大量重复的前进+转向动作,我们可以把这些重复的动作模式提取出来,用循环或函数封装来减少冗余代码。

先修正原代码里的小问题:From应该改成小写的from,否则会触发语法错误。

方法一:用动作序列循环执行

把所有前进和转向的动作整理成序列,通过循环遍历执行,让代码更紧凑:

from turtle import *

# 定义动作序列:每个元素是(前进距离, 转向角度, 转向方向),最后一组只前进不转向
actions = [
    (50, 40, 'left'),
    (50, 40, 'right'),
    (50, 90, 'left'),
    (50, 40, 'right'),
    (50, 80, 'left'),
    (50, 40, 'right'),
    (50, 90, 'left'),
    (50, 40, 'right'),
    (50, 90, 'left'),
    (50, 50, 'right'),
    (50, 90, 'left'),
    (50, 40, 'right'),
    (50, 80, 'left'),
    (50, 40, 'right'),
    (50, 90, 'left'),
    (50, 40, 'right'),
    (50, None, None)
]

# 执行初始前进
forward(50)
# 遍历动作序列完成绘制
for dist, angle, direction in actions:
    forward(dist)
    if angle and direction:
        left(angle) if direction == 'left' else right(angle)

done()

方法二:封装重复动作片段为函数

观察代码能发现有两段完全重复的动作组,把它们封装成函数,通过调用函数减少重复代码:

from turtle import *

def repeat_star_part():
    # 封装重复出现的动作片段
    forward(50)
    right(40)
    forward(50)
    left(80)
    forward(50)
    right(40)
    forward(50)
    left(90)

# 初始绘制部分
forward(50)
left(40)
forward(50)
right(40)
forward(50)
left(90)
forward(50)

# 调用重复片段
repeat_star_part()

# 中间衔接动作
forward(50)
right(40)
forward(50)
left(90)
forward(50)
right(50)
forward(50)
left(90)

# 再次调用重复片段
repeat_star_part()

# 最后一步前进
forward(50)

done()

两种方式都能完全保留原代码的绘制逻辑,同时大幅缩短代码长度,让结构更清晰易维护。

内容的提问来源于stack exchange,提问作者Amir4515WW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:39:55