介绍下Python里自带的一个有趣画图模块库:Turtle库

原创 码农  2020-01-27 10:35:10  阅读 842 次 评论 0 条

众所周知,Python 生态里面有数不尽的第三方库。所以大家在写程序的时候,总是到处去寻找各种各样的第三方库。

但大家没有注意到的是,Python 官方自带的库里面,也藏着各种各样的宝贝。

今天我们介绍的是 Python 自带的turtle库。turtle 库的中文名叫做海龟绘图。是 Python 2.5开始引入的官方模块。很适合用来引导小孩学习编程。最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的Logo 编程语言。

要使用 turtle 库非常简单,只需要在 Python 中使用 import turtle导入即可:

>>> import turtle

turtle库是用来画图的一个库。现在我们来画一根直线:

>>> turtle.goto(100, 0)

运行完成以后,会自动弹出一个 tk 窗口,在窗口中,我们可以看到一根箭头。运行效果如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第1张

其中,箭头的“三角形”就是“乌龟”(让我想到了真空中的球形鸡),直线就是我们刚刚画出来的线。这跟线长度是100像素。turtle.goto(x, y)这个方法,接收两个参数,第一个参数是横坐标,第二个参数是纵坐标。程序开始运行时,乌龟所在的位置为(0, 0)

我们试一试再画一条线,让乌龟爬到(300, 400)

>>> turtle.goto(300, 400)

运行效果如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第2张

我们可以看到,乌龟跑到每个坐标,都会拉出一条直线。能不能让乌龟移动都某个地方,但是不画线呢?此时我们可以使用turtle.penup(),先把画笔提起来,再移动乌龟既可。乌龟移动完成以后,使用turtle.pendown()重新把画笔放下,就可以继续画图了:

>>> turtle.penup()
>>> turtle.goto(-100, -150)
>>> turtle.pendown()
>>> turtle.goto(20, 10)

运行效果如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第3张

我们可以使用turtle.home()让乌龟从当前位置爬回(0, 0),相当于turtle.goto(0, 0)。也可以使用turtle.clear()清空当前画布。

turtle.home()
turtle.clear()

现在我们综合使用一下上面的几个方法:

>>> turtle.penup()
>>> turtle.goto(-100, 100)
>>> turtle.pendown()
>>> turtle.goto(100, -100)
>>> turtle.penup()
>>> turtle.goto(-100, -100)
>>> turtle.pendown()
>>> turtle.goto(100, 100)
>>> turtle.penup()
>>> turtle.goto(120, 100)
>>> turtle.pendown()
>>> turtle.goto(150, 0)
>>> turtle.goto(180, 100)
>>> turtle.goto(150, 0)
>>> turtle.goto(150, -100)

运行效果如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第4张

我们来玩点有趣的东西。既然可以通过坐标画直线,那么我们现在定义两个函数:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第5张

这两个函数对应的代码为:

import math


def fx(x):
    return math.sqrt(2 * abs(x) - x ** 2)


def gx(x):
    return -2.14 * math.sqrt(math.sqrt(2) - math.sqrt(abs(x)))

其中 x 的定义域为-2到2,但是由于图中是以像素为单位的,2像素显然太小了。所以我们把 x 和 y 都扩大100倍。

完整的代码如下:

import math
import turtle

def fx(x):
    return math.sqrt(2 * abs(x) - x ** 2)


def gx(x):
    return -2.14 * math.sqrt(math.sqrt(2) - math.sqrt(abs(x)))


up_part_point = []
down_part_point = []
for x in range(-20, 21):
    x /= 10
    y1 = fx(x)
    y2 = gx(x)
    up_part_point.append((100 * x, 100 * y1))
    down_part_point.append((100 * x, 100 * y2))


turtle.penup()
turtle.goto(*up_part_point[0])
turtle.pendown()
for point in up_part_point:
    turtle.goto(*point)

turtle.penup()
turtle.goto(*down_part_point[0])
turtle.pendown()
for point in down_part_point:
    turtle.goto(*point)


turtle.done()

运行效果如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第6张

除了上面的基本用法外,我们还可以修改颜色,让图片更好看,如下图所示:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第7张

或者画出更复杂的图片:

介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第8张
介绍下Python里自带的一个有趣画图模块库:Turtle库 编程代码 第9张

具体 API 可以阅读 turtle 的官方文档[1]

参考资料

[1]

官方文档: https://docs.python.org/zh-cn/3/library/turtle.html#module-turtle


本文地址:https://www.itcodeit.com/post/64.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?