前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >悄悄告诉你,Python 里面有一只小乌龟

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

作者头像
青南
发布2020-02-19 15:52:15
1.3K0
发布2020-02-19 15:52:15
举报
文章被收录于专栏:未闻Code未闻Code

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

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

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

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

代码语言:javascript
复制
>>> import turtle

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

代码语言:javascript
复制
>>> turtle.goto(100, 0)

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

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

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

代码语言:javascript
复制
>>> turtle.goto(300, 400)

运行效果如下图所示:

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

代码语言:javascript
复制
>>> turtle.penup()
>>> turtle.goto(-100, -150)
>>> turtle.pendown()
>>> turtle.goto(20, 10)

运行效果如下图所示:

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

代码语言:javascript
复制
turtle.home()
turtle.clear()

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

代码语言:javascript
复制
>>> 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)

运行效果如下图所示:

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

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

代码语言:javascript
复制
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倍。

完整的代码如下:

代码语言:javascript
复制
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]

参考资料

[1]

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档