turtle是python 自带_悄悄告诉你,Python 里面有一只小乌龟

悄悄告诉你,Python 里面有一只小乌龟

摄影:产品经理

我一开始就说这杯酒有点少

众所周知,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 窗口,在窗口中,我们可以看到一根箭头。运行效果如下图所示:

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

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

>>> turtle.goto(300, 400)

运行效果如下图所示:

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

>>> turtle.penup()

>>> turtle.goto(-100, -150)

>>> turtle.pendown()

>>> turtle.goto(20, 10)

运行效果如下图所示:

我们可以使用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)

运行效果如下图所示:

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

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

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()

运行效果如下图所示:

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

或者画出更复杂的图片:

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

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值