如何用循环简化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
相关产品推荐
相关产品推荐

