(本篇文章是针对中国电子学会青少年编程等级考试的,适合初学者以及青少年编程学习者)
本篇文章主要介绍turtle画图部分,其他一级考试知识点请移步下方链接:python等级考试——一级知识点汇总(不包含turtle画图)
目录
一. turtle库简介
1.1 导入turtle库
1.2 turtle入门介绍
二. 基本命令——移动
2.1 向前向后移动
2.2 向左向右转
2.3 画点
2.4 画圆/弧线/正多边形
2.4.1 画圆
2.4.2 画弧线
2.4.3 画正多边形
三 . 箭头造型
四. 画笔设置
4.1 画笔速度
4.2 画笔颜色
4.3 画笔粗细
五. 填充设置
六 . 画布设置
七. 抬笔和落笔
1. 坐标
2. 抬笔与落笔
一. turtle库简介
turtle库也叫海龟画图,它是Python中的一个标准库,用于绘制图形和进行简单的图形编程。我们可以想象屏幕上有一个小海龟,它会根据我们的指令在屏幕上行走,它走过的痕迹,就是我们所绘制的图形。
1.1 导入turtle库
当我们想使用turtle库画图的时候,第一件事,就是要把这个库引入到你自己的py文件中,这样才能使用这个库里面的函数和方法,那么这个引入的过程就是导入,导入的形式你可以下面这样写:
import turtle
或者:
import turtle as t # 这句话其实就是给turtle起了个简单的名字t
那么这两种有什么区别呢,举个例子,比如你想让小海龟向前走100个单位,需要这样写: turtle.forward(100),但是当你采用第二种引用的方法,你就可以这样写: t.forward(100);这样代码量会减少,当然,使用第一种也没有问题。
1.2 turtle入门介绍
小海龟在我们的绘图空间中其实是有一个隐藏着的坐标系的,而我们的小海龟的起始位置就在原点上,如下图所示:
原点位于画布的正中心,有一个非常非常重要的点,起始默认小海龟是头朝右的,也就是说,如果你在刚开始让小海龟向前走100个单位,它会往右走,这点一定要注意,很多小朋友写着写着就不知道小海龟头朝哪里了。
除此之外,建议在画完图结尾加上turtle.done()命令:用来停止画笔绘制,但绘图窗体不关闭。这样就不会出现死机现象。
二. 基本命令——移动
2.1 向前向后移动
1. 向前移动 t.forward(x) 向前移动指定距离,(引入时候用的 import turtle as t)
小海龟沿着当前方向向前走x距离,会在画布上留下一条直线,如下:
import turtle as t
# 向前(默认向右)画100步
t.forward(100)
t.done()
运行结果如下:
2. 向后移动 t.backward(x) 向后移动指定距离,(引入时候用的 import turtle as t)
此命令是沿着小海龟头的相反方向走,你也可以理解为倒车。
import turtle as t
# 向后(默认向左)画100步
t.backward(100)
t.done()
仔细对比上下两张图可以发现,箭头方向始终是一样的,只是第一幅图在往前走,第二幅图在往后退。
2.2 向左向右转
上面的例子都是在一条直线上运动,那么怎么让小海龟转弯呢,通过下面的命令:
1. 向左转 t.left(x) 括号里的参数是角度
import turtle as t
t.forward(100)
t.left(30)
t.forward(100)
t.done()
运行结果如下
先往前走100像素,再向左转30度,再向前走100像素,得到的效果就是这样,
1. 向右转 t.right(x) 括号里的参数是角度
知道左转,那么右转也一样,我就不再举例了。
2.3 画点
t.dot(x,y) 里面的参数是半径大小和颜色(当然也可以不写参数,就是默认大小)
import turtle as t
# 画一个半径40的点
t.dot(40)
t.done()
运行结果如下
这个命令看似简单,但实际上可以帮助我们完成很多任务,比如这道题
这道题可以先画一个半径很大的黄色的大点,然后再移动小乌龟向右超出这个点,然后再画一个半径小一些的白色的点,这样就可以把黄色的盖上一部分,也就形成了一个小月亮。
2.4 画圆/弧线/正多边形
t.circle(x,y,z) 里面三个参数
这个函数算的上比较难的点了,因为参数比较多,组合情况也比较多,掌握基础的画圆很简单,想完全理解这个函数还是需要下点功夫的。
2.4.1 画圆
当里面只写一个参数时,这个参数是半径,它控制着圆的大小,数值越大,画的圆也就越大,如下:
import turtle as t
# 画两个圆,第一个半径50,第二个半径一百
t.circle(50)
t.circle(100)
t.done()
结果如下:
当这个参数设置的是个正数,画笔会沿着小海龟头的方向去逆时针画圆,也就是让小海龟在身体左侧画个圆,如果是负数,画笔则会沿着小海龟尾巴的方向去顺时针画圆。
2.4.2 画弧线
如果写两个参数,那么第一个参数仍然是半径,而第二个参数则是弧度,如果不写的话就是默认值,其默认值是360,也就是一圈。(这也是为什么只填写一个参数的时候会直接画圆的原因)那如果我们想画一个半圆,只需要将其设置为180就可以了,比如:
import turtle as t
t.circle(100, 180)
t.done()
结果如下:真题样例如下:
2.4.3 画正多边形
第三个参数是步数,这个过程其实是这样(能理解就理解,理解不了就死记住):把用前两个参数画的弧线用步数分割,然后拿直线代替,第三个参数越大,整体就趋近于圆。
那利用这个原理,我们就可以通过这个函数非常轻易的画出一个等边三角形,正方形,正六边形等等。比如,我们如果只运用前面的知识画三角形,如下:
import turtle as t
# 以前需要写这么多行
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.done()
import turtle as t
# 现在只需要一行
t.circle(100, 360, 3)
t.done()
ok,那移动命令暂时就说这么多,还有一个goto方法,这个方法我们放到抬笔落笔那里将。
三 . 箭头造型
我们默认情况下,就是一个小黑箭头,但是其实可以给它设置成其他的样式(说实话,这个方法没什么意义,作为了解即可)
方法名 | 方法说明 |
---|---|
.shape() | 箭头的造型:arrow、turtle、circle、square、triangle、classic |
.hideturtle() | 绘图结束后,把箭头隐藏起来。 |
.showturtle() | 显示箭头。 |
需要注意的是,考试题中有时候会有误导选项,说turtle画图可以随意改变箭头造型比如dog,这是错误的,虽然可以改动箭头形状,但是并不是想改什么就改什么。想把造型设置成海龟就如下,其他情况同理:
import turtle as t
# 造型设置为海龟
t.shape('turtle')
t.forward(100)
t.done()
四. 画笔设置
4.1 画笔速度
如果嫌画的慢,可以把画笔速度调的快一些
t.speed(s) 设置绘图的速度:0或大于10表示瞬间绘制,1~10之间,1最慢,10最快
4.2 画笔颜色
有两种方法可以修改笔迹的颜色,第一种是:
t.color(p,q)
p: 边框和画笔 q:填充颜色【如果只有p参数,则设置所有颜色,包括边框和填充颜色】
比如:
第二种是:
t.pencolor() 设置画笔颜色,绘制的线条以及笔头的轮廓部分
如果这两个参数都设置我们看看会发生什么情况。
import turtle as t
t.shape('turtle')
t.color("red","green")
# 设置画笔颜色
t.pencolor("yellow")
t.circle(100)
t.done()
可以看到,我们先把笔迹设置成红色,然后又设置成了黄色,最后得到的结果是黄色,也就是说,下面的代码会覆盖上面的代码,如果第三行和第四行的代码互换,得到的线就是红色的。
4.3 画笔粗细
t.pensize(s) 设置画笔粗细,填入数字,最小值1
这部分没啥好解释的,按照题目要求设置就可以了。
五. 填充设置
可以在一个封闭区域填充颜色,通过下面三个turtle的方法就可以实现。
方法名 | 方法说明 |
---|---|
t.fillcolor(x) | x 设置填充的颜色 |
t.begin_fill() | 在需要填充的封闭区域前设置 |
t.end_fill() | 在需要填充的封闭区域后设置 |
那么这些方法怎么使用呢,用一个例子演示一下,大家就清楚了
import turtle as t
t.shape('turtle')
t.color("red", "green")
t.begin_fill() # 开始填充
t.fillcolor("yellow") # 可以在这里改变填充的颜色,将绿色改为黄色
t.circle(100)
t.end_fill() # 结束填充
t.done()
有了填充颜色的方法,我们就可以绘制各种好看的图案了,比如说上方右侧最经典的美国队长的盾牌。
六 . 画布设置
t.screensize(width,height,bg) ,设置画布的大小【默认大小为(400,300)】
画布就是我们的绘图区域,第一个参数是宽度,第二个参数是高度,默认情况下宽度是400,高度是300,第三个参数是背景颜色。
七. 抬笔和落笔
1. 坐标
默认情况下,海龟绘图在屏幕原点(0,0)位置开始。可以设置对应坐标让其在指定位置绘制.
t.goto(x, y) 到达指定坐标(x,y)
import turtle as t
t.circle(100)
# 将画笔在y轴上移50的位置
t.goto(0,50)
t.circle(50)
t.done()
结果如下:
虽然绘制出了同心圆,但有一个问题:当绘制第二个圆时,笔头划过路过的区域,会有一条线连起来,此时,我们需要通过抬笔和落笔来解决。
2. 抬笔与落笔
每次当笔头要位移绘制时,我们需要将笔头抬起,然后再绘制处再落笔就可以了。
t.penup() 设置画笔抬起,此时无法绘制内容 简写( t.up())
t.pendown() 设置画笔落下,此时可以绘制内容 (t.down())
那我们用这个方法重新修改一下上面的代码
import turtle as t
t.goto(0,0)
t.circle(100)
t.penup() #抬笔
t.goto(0,50)
t.pendown() #落笔
t.circle(50)
t.done()
可以发现,成功解决了该问题。
那么一级等级考试的知识点,大概就是这些,对于海龟绘图的掌握,还是需要多练习,把近几年的真题拿过来做一做,找一下自己哪个方法用的不熟练,用的不对,再进行针对性的练习。