可能这几节课以来,您心里一直有个疑问——绘制的图形虽然越来越复杂了,可还是不够漂亮啊!难道海龟只能绘制黑色的线条吗?
当然不是!今天,我们就要给您点“颜色”看看。
其实,让海龟画出不同的颜色并不难,只需要调用小海龟的“pencolor()”方法。所谓“方法”,暂时可以理解为小海龟“会做的事”,在小海龟后使用“.”符号进行调用,形成“t.pencolor()”语句,就可以让小海龟绘出您喜欢的颜色了(如下图)。
假设您对“红色”情有独钟,那么按“F5”键运行后,就会得到如下的结果:
嗯,果然不再是单调的黑色线条了,如您所愿,现在已经变成了单调的红色线条。
什么,这不是您想要的?您想要的是“绚丽多彩”?
好吧,谁让我在今天项目的前导部分答应您了呢。说到就要做到,现在我们就来研究一下绚丽多彩。
既然是“多彩”,肯定就要在程序运行的过程中多次使用“t.pencolor()”语句,并且每次使用都要设定为不同的颜色。
我们再来看一下这段“单调的红线条”代码:
这段代码可以分为两大部分:
第一部分(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”列表,列表用一对方括号“[ ]”表示:
没看到颜色是吧?因为此时的列表是“空的”,还没有“装”上我们要用的数据。给列表装数据的方法很多,主要分为“定义列表的同时装入初始数据”和“在程序运行过程中通过‘追加’等方式为列表添加数据”两种方式。今天我们选择第1种方式——在定义列表时直接把数据装入列表,为此,我们修改之前定义colors列表的语句如下,把预先定义好的“颜色名称”放入列表中:
列表创建好之后,“读取”列表中的数据(行话叫“元素”),也使用方括号“[ ]”,并在“[ ]”内填上一个“整数”,代表你要读取第“几”个数据(行话叫“索引”或“下标”,外国话叫“index”)。对于上述列表,列出各元素就是:
⚠️ “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])。
把这条“核心语句”放到循环中,得到我们最终的代码如下:
忙活了大半天,终于要看到成果了。赶快按下“F5”运行一下吧!
您可能也觉得有些颜色在白色的背景下看起来不够靓丽,您尽可以在列表中设定自己喜欢的颜色值,或是使用上图中红框中的“turtle.bgcolor(“black”)”语句将画布的背景色设定为黑色,就像下面视频中的那样。您是否也得到了这样的结果呢?
项目小结:
在今天的项目中,我们:
-
学会了小海龟“设定画笔颜色”的方法——t.pencolor( “red”) ;
-
学会了如何“创建列表”,以及“设置和读取列表中数据”的方法;
-
学会了使用“求余数运算符(%)”,通过循环,得到一个数字序列的方法;
-
学会了如何把上述3种新技能结合起来,让小海龟画出绚丽多彩图形的方法;
-
学会了“设定画布背景颜色”的方法——turtle.bgcolor(“black”) 。
⚠️ 今天课程内容较多,而且“列表”的创建和使用是一个难点,大家要认真体会。
来源:CSDN
作者:www.kidscoding8.com
链接:https://blog.csdn.net/weixin_40897235/article/details/86672280