题目

用 Python Turtle 绘制下面的图形。

题目说明

这道题的图形像一个由小正方形边框拼出来的十字。每一小段长度都是 50 像素,转角都是 90 度。观察图形时,可以先找重复单元:每一组都是连续画 3 段线,再调整方向,下一组继续画。

最终效果

Python 海龟绘图 100 题,第 11 题

Python 海龟绘图 100 题,第 11 题

知识点

  • t.fd(50):每次画出一小段 50 像素的边。
  • t.lt(90):向左转一个直角,用来画阶梯形转折。
  • t.rt(90):向右转一个直角,让下一组线段继续向外展开。
  • 嵌套循环:外层控制重复组数,内层控制每组里的 3 段线。

绘图思路

可以把图形拆成 4 组相同的动作。每一组先画 3 条 50 像素的线段,每画一段就左转 90 度;画完一组后,再右转 180 度或按固定动作调整方向。这样重复 4 次,就能得到题图中的阶梯十字形。

完整代码

Python
# 不使用循环。
import turtle as t

t.fd(50)
t.lt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.rt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.rt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.rt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.lt(90)
t.fd(50)
t.rt(90)

# 使用循环,方法一。

for i in range(4):
    for j in range(3):
        t.fd(50)
        t.lt(90)
    t.rt(180)

# 使用循环,方法二。

for i in range(4):
    t.fd(50)
    t.lt(90)
    t.fd(50)
    t.lt(90)
    t.fd(50)
    t.rt(90)

关键步骤讲解

找到重复单元

这道题不是普通的正方形或长方形,不能只看外轮廓。把它拆开后,会发现每一组都是 3 条短线段和几个直角转向。

每段长度保持一致

题图里的标注都是 50,所以代码里每次前进都写 t.fd(50)。只要其中一段长度变了,十字形就会不对称。

方法一使用嵌套循环

外层 for i in range(4) 表示一共画 4 组。内层 for j in range(3) 表示每组画 3 段线,每段之后左转 90 度。每组结束后用 t.rt(180) 调整到下一组的方向。

方法二直接重复一组动作

方法二把每组的 3 次前进和转向都写出来,只用一层循环重复 4 次。它比不使用循环短,也比嵌套循环更容易一眼看懂。

常见错误

  • 循环次数写成 3:图形只会画出三组,少一个方向。
  • t.rt(180) 写成 t.rt(90):方法一里下一组方向会错。
  • 忘记内层循环缩进:Python 会报错,或者只重复了部分命令。
  • 某一处把 50 写成其他数字:图形会失去规则的阶梯效果。

练习

把所有 50 改成 4070,观察图形整体大小怎么变化。也可以只保留方法二,试着把一组动作改成函数,再调用 4 次。