如何精简Python Turtle绘图代码?需保留原输出效果
精简Python Turtle代码(保持绘图效果不变)
我是一名编程初学者,希望在不改变绘图输出效果的前提下,精简这段使用Python Turtle编写的代码行数。我曾尝试用for循环等方法,但无法得到与原代码一致的输出,特寻求帮助。
原始代码
import turtle t=turtle.Turtle() t.speed(5) #external form t.pen(pensize=2, pencolor="blue") t.forward(400) t.right(120) t.forward(200) t.pen(pensize=2, pencolor="purple") t.right(120) t.forward(200) t.right(60) t.forward(200) t.left(120) t.forward(200) t.right(60) t.forward(200) t.left(120) t.forward(200) t.right(60) t.forward(200) t.left(120) t.forward(200) t.right(60) t.forward(200) t.left(120) t.forward(200) t.right(60) t.forward(200) t.left(120) t.forward(200) t.right(60) t.forward(200) t.penup() t.goto(0,0) t.pendown() t.pen(pensize=2, pencolor="blue") t.left(180) t.forward(400) t.right(120) t.forward(200) t.pen(pensize=2, pencolor="purple") t.right(60) t.forward(200) t.pen(pensize=2, pencolor="blue") t.right(60) t.backward(200) t.forward(800) t.right(120) t.forward(200) t.backward(200) t.left(120) t.backward(800) t.left(60) t.forward(200) t.penup() t.goto(0,0) t.pendown() t.left(60) t.forward(400) t.right(120) t.forward(200) t.backward(200) t.right(60) t.forward(800) t.right(120) t.forward(200) #inner figure t.penup() t.goto(-45, -230) t.pendown() t.pen(pensize=4, pencolor="yellow") t.right(120) t.forward(90) t.circle(5,90) t.forward(90) t.left(90) t.forward(105) t.back(110) t.left(-90) t.forward(15) t.left(90) t.forward(110) t.left(90) t.forward(15) t.left(90) t.forward(5) t.right(90) t.forward(90) t.circle(5,90) t.penup() t.goto(-25,-118) t.pendown() t.left(90) t.forward(8) t.circle(-10,90) t.forward(30) t.circle(-10,90) t.forward(8) t.penup() t.goto(-25,-215) t.pendown() t.left(180) t.forward(65) t.penup() t.goto(0,-215) t.pendown() t.forward(65) t.penup() t.goto(25,-215) t.pendown() t.forward(65)
精简后的代码
import turtle t = turtle.Turtle() t.speed(5) # 外部图形绘制 t.pen(pensize=2, pencolor="blue") t.forward(400) t.right(120) t.forward(200) t.pencolor("purple") t.right(120) t.forward(200) # 重复斜向线段用循环处理 for _ in range(5): t.right(60) t.forward(200) t.left(120) t.forward(200) # 返回原点继续绘制 t.penup() t.goto(0, 0) t.pendown() t.pencolor("blue") t.left(180) t.forward(400) t.right(120) t.forward(200) t.pencolor("purple") t.right(60) t.forward(200) t.pencolor("blue") t.right(60) t.backward(200) t.forward(800) t.right(120) t.forward(200) t.backward(200) t.left(120) t.backward(800) t.left(60) t.forward(200) # 返回原点绘制另一部分 t.penup() t.goto(0, 0) t.pendown() t.left(60) t.forward(400) t.right(120) t.forward(200) t.backward(200) t.right(60) t.forward(800) t.right(120) t.forward(200) # 内部图形绘制 t.penup() t.goto(-45, -230) t.pendown() t.pen(pensize=4, pencolor="yellow") t.right(120) t.forward(90) t.circle(5, 90) t.forward(90) t.left(90) t.forward(105) t.back(110) t.left(-90) t.forward(15) t.left(90) t.forward(110) t.left(90) t.forward(15) t.left(90) t.forward(5) t.right(90) t.forward(90) t.circle(5, 90) t.penup() t.goto(-25, -118) t.pendown() t.left(90) t.forward(8) t.circle(-10, 90) t.forward(30) t.circle(-10, 90) t.forward(8) # 底部三条横线用循环处理 for x in (-25, 0, 25): t.penup() t.goto(x, -215) t.pendown() if x == -25: t.left(180) t.forward(65) turtle.done()
精简说明
- 循环复用重复操作:外部图形中重复5次的
right(60)-forward(200)-left(120)-forward(200)序列,用for循环替代,减少冗余代码。 - 简化画笔设置:重复设置
pensize=2的操作只保留一次,后续仅修改pencolor即可,因为画笔粗细未变。 - 底部横线循环绘制:三条位置规律的横线用循环遍历x坐标,避免重复的抬笔、移动、落笔、画线操作。
- 保留核心逻辑:所有绘图的角度、距离、颜色设置完全和原代码一致,确保输出效果无变化。
内容的提问来源于stack exchange,提问作者ggpython
相关产品推荐
相关产品推荐

