【编程课堂】海龟作图

0、前言

turtle  是 python 内置的一个比较有趣味的模块,俗称 海龟作图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。

1、基本功能介绍

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。

1.1 Turtle motion (运动控制)

本节中包含了运动控制中常用的一些函数

turtle.goto(x,y)
画笔定位到坐标(x,y)
turtle.forward(distance)
向正方向运动 distance 长的距离
turtle.backward(distance)
向负方向运动 distance 长的距离
turtle.right(angle)
向右偏 angle 度
turtle.left(angle)
向左偏 angle 度
turtle.home()
回到原点
turtle.circle(radius, extent=None, steps=None)
画圆形 radius 为半径,extent 为圆的角度
turtle.speed(speed)
以 speed 速度运动

看到这么多函数肯定已经头大了,我们以例题来讲解。

首先画一个边长为100的正方形,然后再以半径为50画出其3/4圆。

# 控制画笔的速度
turtle.speed(5)
# 将画笔定位到原点
turtle.goto(0,0)
# 从原点开始,画出一个边长为100的正方形
for i in range(4):
   # 正向运动 100 的距离    turtle.forward(100)
   # 向右偏 90 度    turtle.right(90)
# 将画笔定位到原点
turtle.home()
# 画出一个半径为100,占3/4的圆
turtle.circle(50,270)

最后得到以下结果:

1.2 Pen control (画笔控制)

本节包含了对画笔的控制函数,常用的如下:

turtle.pendown()
落笔,在此状态下会画出运动的轨迹
turtle.penup()
起笔,在此状态下不会画出运动的轨迹
turtle.pensize(width=None
画笔粗细
turtle.pencolor(*args
画笔颜色
turtle.fillcolor(*args)
填充颜色
turtle.begin_fill()
开始填充
turtle.end_fill()
结束填充
turtle.write(arg, move=False, align=”left”, font=(“Arial”, 8, “normal”))
写文字

同样,我们以一个例题来讲解。

画一个正方形并填充,最后写一些文字

# 控制画笔颜色
turtle.pencolor('red')
# 落笔
turtle.pendown()
# 设置填充颜色
turtle.fillcolor('blue')
# 开始填充
turtle.begin_fill()
# 从原点开始,画出一个边长为100的正方形
for i in range(4):
   # 正向运动 100 的距离    turtle.forward(200)
   # 向右偏 90 度    turtle.right(90)
   # 结束填充turtle.end_fill() turtle.penup() turtle.goto(100,-100) turtle.write('Crossin编程教室')

最后的结果是这样

同时,我们还可以设置画笔打粗细、画笔的速度等属性。

1.2 Window control (视窗控制)

这里有两个常用的函数

turtle.bgcolor(*args)
设置背景颜色
turtle.bgpic(picname=None)
背景图片填充

设置代码如下

turtle.bgcolor('red') turtle.bgpic(r'yourpic.png')

2、海龟作图实例

我们用几个简单的例子讲解海龟作图的用法。

2.1 用正方形画圆

import turtle
for i in range(360):    turtle.setheading(i)
   for i in range(4):        turtle.forward(100)        turtle.left(90)

360 个正方形每隔 1 度排列,短短几行代码可以生成一个漂亮规则的图形。

2.2 红色的五角星

使用填充功能画出一个大红星

import turtle turtle.color('red','red') turtle.begin_fill()
for i in range(5):    turtle.forward(100)    turtle.right(144) turtle.end_fill()

结果如图:

2.3 更多案例

讲的再多也不如自己动手做一做,我们在网上挑选了几张使用 turtle 做的有意思的图片,大家可以欣赏并试着做一下。

3、后记

更丰富详细的功能及知识可以参考:

官方文档:https://docs.python.org/3/library/turtle.html
海龟作图—用 Python 绘图:http://www.epubit.com.cn/book/onlinechapter/37788
Simple drawing with turtle:https://opentechschool.github.io/python-beginners/en/simple_drawing.html
Hello, little turtles!:http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html
Turtle examples:https://michael0x2a.com/blog/turtle-examples
Easy Designs - Turtle Graphics Python:http://www.instructables.com/id/Easy-Designs-Turtle-Graphics-Python/


(0)

相关推荐

  • 【组队学习】【27期】青少年编程(Turtle)

    青少年编程(Turtle) 论坛版块: http://datawhale.club/c/team-learning/34-category/34 开源内容: https://github.com/da ...

  • 用 Python 创作酷炫的几何图形

    用 Python 创作酷炫的几何图形

  • Python|画出一个300像素的十字架

    前言后台收到了一个粉丝的提问:如何画出一个像素为300的十字架. 问题描述在python中如何画出一个像素为300的十字架.解决方案在python的众多第三方库中使用turtle库可以很好的解决大部分 ...

  • 用 Python 画动态时钟

    来源:Python 技术「ID: pythonall」 时钟是我们日常生活中最常见的也是必不可少的东西,你有没有想过用 Python 来画一个实时动态的时钟呢?下面我们来看看如何使用简单的代码实现一个 ...

  • 【青少年编程(第24周)】Python-Turtle组队学习结营!

    2021年08月01日(周日)晚20:00我们在青少年编程竞赛交流群开展了第二十四次直播活动.我们直播活动的主要内容如下: 首先,我们奖励了上周测试超过60分的小朋友. 其次,讲解了上次测试中小朋友们 ...

  • 趣玩 Python 之绘制基本图形

    Python中的类库极其丰富,数据科学中经常会用到可视化技术.今天我们来一学习一下Python中基本图形的绘制方法,本文我们将主要基于turtle(小乌龟)库来画图~ 为了方便后面进行交互性演示,这里 ...

  • 【编程课堂】装饰器浅析

    Python 拥有丰富强大的功能和表达特性,其中之一便是装饰器,装饰器能够在不改变函数.方法.类本身的情况下丰富他们的功能. 比如,我们有一个函数 func ,我们希望在不改变函数的前提下记录函数运行 ...

  • 【编程课堂】以 jQuery 之名 - 爬虫利器 PyQuery

    很多读者在学习了 Python 之后都想做一些爬虫程序,去网上采集数据或完成一些自动化操作.因此,我们也制作了一套爬虫实战课程,目前正在最后的完善中,很快将和各位见面. 等不及的朋友,可以先来看看这个 ...

  • 【编程课堂】同一台电脑,不同的 Python

    virtulenv 是一个创建独立 python 运行环境的工具. 在标准的 python 环境中,所有的库都是唯一存在的,不会有两个或以上版本的相同库. 但在日常的开发工作中常常会遇到此类问题,比如 ...

  • 【编程课堂】selenium 祖传爬虫利器

    一些网页,比如微博,只有在登录状态才能进行页面的访问,或者对数据有比较复杂的验证和保护,直接通过网络请求进行登录并获取数据就会比较麻烦.这种时候,就该本篇的主角 selenium 上场了. Selen ...

  • 【编程课堂】jieba-中文分词利器

    0.前言 在之前的文章[编程课堂]词云 wordcloud 中,我们曾使用过 jieba 库,当时并没有深入讲解,所以本次将其单独列出来详细讲解. jieba库是进行中文分词的利器,根据文档描述,具有 ...

  • 【编程课堂】 windows计划任务

    在学习了一些爬虫或者 web 开发等知识之后,常常我们会有这样的需求: 写了个爬取豆瓣电影的脚本,需要每天定时自动运行: 使用 django 开发了一个小小的博客网站,希望开启电脑之后就自动在 CMD ...

  • 【编程课堂】震惊!小 bug 引发大灾难,0.1 + 0.2 的结果竟然是……

    各位观众点进标题看文章的时候,我已经准备打包行李去UC报道啦~ 冷笑话结束,嗯,说正事.请大家思考一下在 python 控制台输入  0.1 + 0.2 == 0.3 ,返回的结果是什么?手边有电脑的 ...

  • 【编程课堂】计数器 Counter

    上一期的编程课堂我们介绍了 有序字典 OrderedDict,这一期我们再来聊聊 同属 collections 模块的另一种数据类型 Counter. 在了解 Counter 之前,请大家思考一个问题 ...

  • 【编程课堂】有序字典 OrderedDict

    编程课堂将和每周一坑一样,成为本教室公众号的一个长期固定栏目.每期讲解一个编程知识点,包括但不限于 Python 语法.模块介绍.编程小技巧等.用简短的篇幅,让你多了解一点编程. 上周每周一坑的题目 ...