python海龟绘图颜色_Python:海龟绘图(六)——来点颜色看看

可能这几节课以来,您心里一直有个疑问——绘制的图形虽然越来越复杂了,可还是不够漂亮啊!难道海龟只能绘制黑色的线条吗?

当然不是!今天,我们就要给您点“颜色”看看。

其实,让海龟画出不同的颜色并不难,只需要调用小海龟的“pencolor()”方法。所谓“方法”,暂时可以理解为小海龟“会做的事”,在小海龟后使用“.”符号进行调用,形成“t.pencolor()”语句,就可以让小海龟绘出您喜欢的颜色了(如下图)。

3-1548587826.jpg

假设您对“红色”情有独钟,那么按“F5”键运行后,就会得到如下的结果:

3-1548587827.jpg

嗯,果然不再是单调的黑色线条了,如您所愿,现在已经变成了单调的红色线条。

什么,这不是您想要的?您想要的是“绚丽多彩”?

好吧,谁让我在今天项目的前导部分答应您了呢。说到就要做到,现在我们就来研究一下绚丽多彩。

既然是“多彩”,肯定就要在程序运行的过程中多次使用“t.pencolor()”语句,并且每次使用都要设定为不同的颜色。

我们再来看一下这段“单调的红线条”代码:

8-1548587827.jpg

这段代码可以分为两大部分:

第一部分(1⃣️)主要进行一些绘图前参数的设置,行话叫“初始化”,以现在计算机的运行速度,这部分会在不到1毫秒的时间内被“一笔带过”。

第二部分(2⃣️)才是真正绘图的部分,我们使用了一个“计数循环”,让小海龟在这个循环中“转悠”上百次,来为我们绘制美丽的图形。

如果要让您多次使用“t.pencolor()”语句且每次都要设定不同颜色,您会把这些语句放在哪儿?是“初始化部分”还是“循环部分”呢?

经过之前的分析,相信您会作出明智的选择。因为小海龟在绘图的过程中需要“不断”的改变画笔颜色,如果放在“初始化部分”,就会在“瞬间”被执行完毕,又如何能在整个绘图过程中“持续”发挥作用呢?所以,正确的“姿势”自然是将“设定画笔颜色”的积木放在循环部分。

我们知道,“t.pencolor()”语句每次可以将一种颜色设定为我们喜欢的颜色,现在需要6种颜色,应该需要6行这样的语句吧?那么现在问题又来了——“循环部分”一共只有4句话,如何能“塞下”这6行“t.pencolor()”呢?

让我们再来仔细分析一下现在的处境——小海龟每次循环只绘制“1条边”并转向,而这个图形是在每次转向后、绘制下条边之前变换颜色,那么我们是需要每次循环变换1次颜色呢、还是变换6次颜色呢?当然是每次循环变换1次颜色。变换1次颜色也就只需要一句“t.pencolor()”。这下好了,不用担心循环里堆满“t.pencolor()”了。

现在还有最后一个问题——如何用“1句”t.pencolor()变换“6种”颜色?这就要请出我们今天的核心技术——列表——来帮忙了。

在之前的项目中我们使用过“变量”,比如“sides”、“length”,都是变量。1个变量可以存储1个“值”或1个“数据”。

与变量不同,“列表”可以存储“多个值”,从而使程序可以高效的处理“一系列”的数据。就像是平时我们用的“整理箱”,单个的整理箱就像是“变量”,把好几个整理箱摞在一起再“编上号”,就成为了一个“列表”。为什么要强调“编上号”呢?因为我们往列表中“放”数据或是从列表中“取”数据,都是根据这个“编号”来进行的。先说这么多,下面看具体使用方法。

在Python中创建“列表”很简单。因为我们需要建立一个跟“颜色”有关的列表,所以这里我们给列表起名叫“colors”(复数,因为列表中要放“一系列”颜色)。使用下面的语句即可创建出“colors”列表,列表用一对方括号“[ ]”表示:

10-1548587828.png

没看到颜色是吧?因为此时的列表是“空的”,还没有“装”上我们要用的数据。给列表装数据的方法很多,主要分为“定义列表的同时装入初始数据”和“在程序运行过程中通过‘追加’等方式为列表添加数据”两种方式。今天我们选择第1种方式——在定义列表时直接把数据装入列表,为此,我们修改之前定义colors列表的语句如下,把预先定义好的“颜色名称”放入列表中:

8-1548587828.png

列表创建好之后,“读取”列表中的数据(行话叫“元素”),也使用方括号“[ ]”,并在“[ ]”内填上一个“整数”,代表你要读取第“几”个数据(行话叫“索引”或“下标”,外国话叫“index”)。对于上述列表,列出各元素就是:

10-1548587829.png

⚠️ “red”对应的索引值是“0”而不是“1”,也就是说,所有的列表的第1个元素是“[0]”所对应的元素,切记!

现在准备工作已就绪,看看我们的代码中该如何使用“列表”中已经存好的数据。经过前面的分析可知,小海龟每次循环只绘制“1条边”并转向,而这个图形是在每次转向后、绘制下条边之前变换颜色,而且要用“1句”t.pencolor()循环使用”6种颜色。那么我们自然就想让小海龟在绘制“第1条边”时使用列表中的“第1个颜色”,也就是“colors[0]”,绘制“第2条边”时使用列表中的“第2个颜色”(colors[1]),……以此类推,绘制“第7条边”时再次使用colors[0],绘制“第8条边”时使用colors[1]……

如何做到这一点呢?我们希望最好能有一个变量,在绘图的过程中能“从0开始逐一增加到5”,然后再回到“0”,再“逐一增加到5”。怎样得到这样的变量呢?这里有一个编程界常用的方法(用个流行词叫“套路”),就是“求余数”。如果您对小学数学还有点印象的话,应该对下面的计算不太陌生:

0 ➗ 6 = 0 …… 0

1 ➗ 6 = 0 …… 1

2 ➗ 6 = 0 …… 2

3 ➗ 6 = 0 …… 3

4 ➗ 6 = 0 …… 4

5 ➗ 6 = 0 …… 5

6 ➗ 6 = 1 …… 0

7 ➗ 6 = 1 …… 1

8 ➗ 6 = 1 …… 2

……

观察一下上述算式中省略号后的余数,我们发现,这些余数组成了一个“从0到5”的循环,刚好对应colors列表中“从0到5”这5个索引!现在对“为什么列表的索引从0开始”有点“感觉”了吧?如果“从1开始”,我们就还得给每个余数都“加上1”,远不如这样方便嘛!

现在已经确定“余数”完全符合我们的要求,那么用谁去除以6得到我们想要的余数呢?看看循环里,从0开始不断增加的那个“变量”是什么?对!就是循环的计数器“i”。

被除数和除数都有了,还记得求余数应该什么运算符吗?对,就是“%”。关于求余数的问题在之前的“在Python中算算数”一课中讲过(点此复习),时间稍微有点久远,大家可以翻看以前的课程复习一下。

所以,我们这条“核心语句”应该分以下步骤写成:

(1)计算“计数器i”除以“6”的余数——i % 6;

(2)用这个算出余数作为“索引”,获取列表colors中的数据——colors[i % 6];

(3)用从列表colors中获取的数据,改变海龟画笔的颜色——t.pencolor(colors[i % 6])。

把这条“核心语句”放到循环中,得到我们最终的代码如下:

10-1548587829.jpg

忙活了大半天,终于要看到成果了。赶快按下“F5”运行一下吧!

您可能也觉得有些颜色在白色的背景下看起来不够靓丽,您尽可以在列表中设定自己喜欢的颜色值,或是使用上图中红框中的“turtle.bgcolor(“black”)”语句将画布的背景色设定为黑色,就像下面视频中的那样。您是否也得到了这样的结果呢?

项目小结:

在今天的项目中,我们:

学会了小海龟“设定画笔颜色”的方法——t.pencolor( “red”);

学会了如何“创建列表”,以及“设置和读取列表中数据”的方法;

学会了使用“求余数运算符(%)”,通过循环,得到一个数字序列的方法;

学会了如何把上述3种新技能结合起来,让小海龟画出绚丽多彩图形的方法;

学会了“设定画布背景颜色”的方法——turtle.bgcolor(“black”) 。

⚠️ 今天课程内容较多,而且“列表”的创建和使用是一个难点,大家要认真体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值