Python Turtle库绘制螺旋曲线详解与多版本实现

小鹿同学
小鹿同学
发布时间:2026-10-15| 1人浏览过
原创

本文详细介绍Python中turtle库的常用绘图函数,并通过四个逐步进阶的代码示例演示如何绘制正方形螺旋曲线。内容涵盖基础单色螺旋、双向绘制、多色分层及反向螺旋的实现逻辑,帮助初学者掌握坐标控制、颜色切换与循环逻辑。

Turtle库常用函数梳理

本文旨在梳理turtle库中高频使用的核心函数,为后续绘图操作奠定基础。

  • turtle.forward(distance):控制画笔沿当前方向前进指定的distance距离。
  • turtle.backforward(distance):控制画笔沿当前方向的反方向移动distance距离。
  • turtle.right(degree):使画笔的绘制方向向右旋转degree度。
  • turtle.exitonclick():设置点击图形窗口后关闭程序,便于查看结果。
  • turtle.penup():抬起画笔,此后移动画笔时不绘制轨迹。
  • turtle.pendown():落下画笔,此后移动画笔时将绘制形状。
  • turtle.pensize():用于设置画笔线条的宽度。
  • turtle.pencolor():用于设置画笔颜色,支持的颜色包括{white, black, grey, dark, green, gold, violet, purple}等。

螺旋曲线绘制实战

在Python入门阶段,turtle库因其直观性而备受青睐。借助CSDN等社区资源的帮助,笔者近期尝试编写了几个简单的turtle绘图程序。出于兴趣分享以下三个原创代码示例,仅供交流参考。

基础版:转圈圈1.0

开发环境选用VSCODE,整体体验良好。尽管turtle库的报错机制尚需进一步摸索,但不影响核心功能的实现。首个示例为最基础的正方形螺旋曲线图,笔者将其命名为“转圈圈1.0”。


import turtle
 
n = 500
turtle.penup()
turtle.goto(-450,150)
turtle.pendown()
turtle.pencolor("blue")
 
for i in range(500):
    n = n - 1
    #n -= 1
    turtle.speed(100)
    turtle.fd(n)
    turtle.right(90)
 
turtle.pendone()
# 转圈圈1.0

代码首先设定画笔起始位置为坐标(-450, 150),并将画笔颜色设置为蓝色。随后通过一个for循环,逐步缩短每次绘制的距离,从而形成螺旋效果。

在for循环内部,变量n的值每次迭代减一,对应turtle.fd(n)命令,即每次前进的距离递减,由此生成最基础的“转圈圈1.0”效果。

运行结果如图所示:

进阶版:转圈圈1.1与1.2

基础版本完成后,我们尝试增加新特性。通过调整n值的变化方向,可以实现从边框向中心或从中心向边框的不同绘制效果。


n -= 1
# 让绘制的图像从边框绘制到中心,那么也就可以用
n += 1
#让绘制的图像从中心绘制到边框

优化后的版本命名为“转圈圈1.1”,具体实现如下。


import turtle
 
n = 0 #
turtle.penup()
turtle.goto(-450,150)
turtle.pendown()
turtle.pencolor("blue")
 
for i in range(500):
    n = n + 1 #
    #n += 1
    turtle.speed(100)
    turtle.fd(n)
    turtle.right(90)
 
turtle.pendone()
# 转圈圈1.1

“转圈圈1.1”的运行结果如图所示:

图注:转圈圈1.1

代码中与1.0版本的主要区别在于n值的变化逻辑,即通过增减n来控制螺旋的扩张或收缩方向。

接下来是“转圈圈1.2”,该版本将1.0和1.1的逻辑融合在同一张图中。通过重合两张图或重新设置起点,实现更复杂的视觉效果。


import turtle
 
n = 500
turtle.speed(100)
turtle.penup()
turtle.goto(-450,150)
turtle.pendown()
turtle.pencolor("blue")
 
for i in range(1000):
 
    if i < 500:
        n = n - 1
        turtle.fd(n)
        turtle.right(90)
    else:
        n+=1
        turtle.pencolor('red')
        turtle.fd(n)
        turtle.right(90)
 
turtle.pendone() 
#转圈圈1.2

“转圈圈1.2”的运行结果如下:

图注:转圈圈1.2

多色分层:转圈圈1.3

进一步地,我们在绘制过程中引入分层颜色。设定初始n值为800,并选取8种颜色(黑、红、橙、黄、绿、蓝、靛、紫),随着n值的减小,颜色依次切换。


import turtle
 
turtle.penup()
turtle.goto(-450,300)
turtle.pendown()
turtle.speed(100)
n = 800
for i in range(10000):
    n -= 1
    if 800 >= n >700:
        turtle.pencolor('purple')
    elif 700 >= n > 600:
        turtle.pencolor("indigo")
    elif 600 >= n > 500:
        turtle.pencolor("blue")
    elif 500 >= n > 400:
        turtle.pencolor("green")
    elif 400 >= n > 300:
        turtle.pencolor("yellow")
    elif 300 >= n > 200: 
        turtle.pencolor("orange")      
    elif 200 >= n > 100:
        turtle.pencolor("red")
    elif n > 0:
        turtle.pencolor("black")
    else:
        turtle.done()
    turtle.fd(n)
    turtle.right(90)
    
#转圈圈1.3
 

“转圈圈1.3”的运行结果如下:

反向螺旋:转圈圈1.4

在上述基础上,我们探讨n值小于零的情况。如代码第一行所示,当n为负数时,绘制方向与正数时相反。随着n值不断减小(绝对值增大),螺旋曲线会逐渐向外扩大。在此基础上覆盖黑色层,即形成“转圈圈1.4”。


turtle.fd(-100)
turtle.fd(100)

通过修改最后的elif和else判断条件,即可实现“转圈圈1.4”的逻辑。


import turtle
 
turtle.penup()
turtle.goto(-450,300)
turtle.pendown()
turtle.speed(100)
n = 800
for i in range(10000):
    n -= 1
    if 800 >= n >700:
        turtle.pencolor('purple')
    elif 700 >= n > 600:
        turtle.pencolor("indigo")
    elif 600 >= n > 500:
        turtle.pencolor("blue")
    elif 500 >= n > 400:
        turtle.pencolor("green")
    elif 400 >= n > 300:
        turtle.pencolor("yellow")
    elif 300 >= n > 200: 
        turtle.pencolor("orange")      
    elif 200 >= n > 100:
        turtle.pencolor("red")
    elif n > 0:
        turtle.pencolor("black")
    # else:
    #     turtle.pendone()
    elif n <= -800:
        turtle.pendone()
        # turtle.pencolor("white")
    else:
        turtle.pencolor("black")
    turtle.fd(n)
    turtle.right(90)
 
 
    #在这里,注释掉了转圈圈1.3里面的几行代码,转圈圈1.4出炉
 
 

在“转圈圈1.4”中,判断语句设定当绘制过程从小变大(即n值从正变负且绝对值增大)时,覆盖使用的颜色为黑色。

角度调整与总结

2019.11.20更新内容。


import turtle
n = 500
# turtle.left(60)s
turtle.penup()
turtle.goto(-450,150)
turtle.pendown()
turtle.pencolor("blue")
for i in range(1,1000,1):
 
    if i < 500:
        n = n - 1
        turtle.speed(100)
        turtle.fd(n)
        turtle.right(140)
    else:
        n+=1
        turtle.speed(100)
        turtle.pencolor('red')
        turtle.fd(n)
        turtle.right(114)
turtle.done()
# 绘制正方形螺旋曲线
    

主要修改了旋转角度,具体逻辑留给读者自行探索。

至此,关于Python入门turtle库实现螺旋曲线图的示例介绍完毕。更多相关内容请搜索本站历史文章或继续浏览后续教程,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。