博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《教孩子学编程(Python语言版)》——2.4 添加颜色
阅读量:7114 次
发布时间:2019-06-28

本文共 2952 字,大约阅读时间需要 9 分钟。

本节书摘来自异步社区《教孩子学编程(Python语言版)》一书中的第2章,第2.4节,作者[美]Bryson Payne,李军 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 添加颜色

这些螺旋线的形状不错,但是,如果它们能够更多彩一些,是不是更酷呢?让我们回到正方形螺旋线代码,在t = turtle.Pen()这一行的后面再添加一行代码,从而将钢笔颜色设置为红色。

SquareSpiral3.py

import turtlet = turtle.Pen()t.pencolor(“red”)for x in range(100):    t.forward(x)    t.left(91)

运行该程序,我们将会看到正方形螺旋线的一个更多色彩的版本,如图2-4所示。

22606a145d0794add868f9a1f9d3f651394d839a

我们尝试用另一种常用的颜色(如“blue”或“green”)来替换掉“red”或“green”并且再次运行该程序。我们可以通过Turtle库使用数百种不同的颜色,包括一些奇怪的颜色,如“salmon”和“lemon chiffon”(访问 可以查看完整的列表)。让整个螺旋线呈现一种不同的颜色是很不错的一步,但是,如果想要让每一边都显示一种不同的颜色,我们该怎么办呢?这需要对程序做一些更多的修改。

2.4.1 一个四色螺旋线

让我们来考虑一下算法(algorithm)。算法就是一系列的步骤,它可以将单色的螺旋线变为4色的螺旋线。大多数的步骤和之前的螺旋线程序中相同,但是,这里还增加了一些调整:

(1)导入turtle模块并且设置一个海龟;

(2)告诉计算机应该使用何种颜色;

(3)设置一个循环,绘制螺旋线中的100条线段;

(4)为螺旋线的每一边选取一种不同的钢笔颜色;

(5)向前移动海龟以绘制每一边;

(6)将海龟向左转,以准备好绘制下一边。

首先,我们需要颜色名称的一个列表,而不是单个的颜色,因此,我们要创建一个名为colors的列表变量并且在列表中放置4种颜色,如下所示。

colors = [“red”, “yellow”, “blue”, “green”]

这个4种颜色的列表,将会针对正方形的每一边给出一种颜色。注意,我们将颜色的列表放在了方括号“[”和“]”之间。这里要确保引号中的每一种颜色名都像我们在第1章中打印出来的单词一样,因为这些颜色名都是字符串(string)或文本值,这是我们稍后要传递给pencolor函数的值。正如前面所提到的,我们使用一个名为colors的变量来存储4种颜色的列表。因此,任何时候,当想要从列表中获取颜色的时候,我们都要使用colors变量来表示钢笔的颜色。记住,变量存储的值是变化的,这正如同其名称一样,变量嘛。

87426a715597f44d0c58987fd87a6e91ee2d07bc

我们需要做的下一件事情是,每次遍历绘制循环的时候修改钢笔颜色。为了做到这一点,我们需要将t.pencolor()函数移入到for循环下的一组指令之中,还需要告诉pencolor函数,我们想要使用列表中的哪一种颜色。

我们输入如下的代码并运行它。

ColorSquareSpiral.py

import turtlet = turtle.Pen()colors = [“red”, “yellow”, “blue”, “green”]for x in range(100):    t.pencolor(colors[x%4])    t.forward(x)    t.left(91)

4种颜色的列表起作用了,我们在这个运行的示例中看到了它们(如图2-5所示)。到目前为止,一切还不错。

a9c30c7c63cbff225d6811fa3870d00bd7159388

pencolor函数中唯一的新增部分是(colors[x%4])。这条语句中的x和我们在程序中其他地方所使用的x是同一个变量,因此,x将持续从0~99增加,就像我们前面所见到的那样。圆括号中的colors变量名告诉Python,从我们在程序前面所添加的、名为colors的颜色名称列表中选取一种颜色。

[x%4]告诉Python我们将使用colors列表中的前4种颜色,即编号从0~3的颜色并且每当x变化的时候就遍历它们。在这个例子中,我们的颜色列表只有4种颜色,因此,我们需要一次又一次地遍历这4种颜色。

colors = [“red”, “yellow”, “blue”, “green”]       0       1        2       3

[x%4]中的“%”叫作模除操作符(modulo operator),表示一次除法运算中的余数(remainder)(5÷4商1余1,因此,5可以包含4一次并且还剩下1;6÷4余2,以此类推)。当我们想要遍历列表中一定数目的项时,例如我们对4种颜色列表所做的操作,模除操作符很有用。

在100步中,colors[x%4]将遍历4种颜色(0、1、2和3,分别表示红色、黄色、蓝色和绿色)整整25次。如果我们有时间(并且有一个放大镜),可以数一数图2-5中有25条红色的、25条黄色的、25条蓝色的和25条绿色的线段。第1次遍历绘制循环的时候,Python使用列表中的第一种颜色,红色;第2次遍历的时候,它使用黄色,以此类推。第15次遍历循环的时候,Python又回过头来使用红色,然后是黄色,等等;每通过循环4次之后,总是又回过头来使用红色。

2773176b0a2299ae791a4deb87a26198a6396fd8

2.4.2 修改背景颜色

让我们再次加入一点内容,创造出比图2-5更漂亮一些的内容。正如我5岁的儿子Alex所指出来的那样,黄色部分太难以识别出来了。这就像是在白色的绘画纸上使用黄色的蜡笔一样,屏幕上的黄色像素无法在白色背景上明显地显示出来。让我们把背景颜色修改为黑色,来修正这个问题。我们在程序中的import行之后的任何位置,输入如下的代码行。

turtle.bgcolor(“black”)

添加这一行之后,图片更加漂亮,所有的颜色现在都处在一个黑色的背景之上。注意,海龟钢笔(在程序中由变量t表示)没有任何变化。相反,我们修改了海龟屏幕的一些内容,也就是背景颜色。turtle.bgcolor()命令允许我们将整个绘制屏幕修改为Python中指定的任何颜色。在turtle.bgcolor(“black”)这一行中,我们选择了黑色作为屏幕颜色,因此,红色、黄色、蓝色和绿色都显示得很好。

此外,我们可以将循环中的range()修改为200甚至更大,以使得螺旋线中的正方形更大。在黑色背景上显示200个线段的新版本的图片,如图2-6

所示。

04331842c8658e643c84a918dbf17b195aa3c9b4

Alex总是想帮助我的程序变得更为惊人,他要求再做一项修改:如果现在把线段替换为圆,那会怎么样呢?那会不会是最酷的图片呢?好吧,我必须承认,这甚至会更酷。完整的代码如下所示。

ColorCircleSpiral.py

import turtlet = turtle.Pen()turtle.bgcolor(“black”)colors = [“red”, “yellow”, “blue”, “green”]for x in range(100):    t.pencolor(colors[x%4])    t.circle(x)    t.left(91)

我们可以在图2-7中看到结果。

8eb8b451d0f95c801ccacb0b46697c5c6553f559

转载地址:http://lyzel.baihongyu.com/

你可能感兴趣的文章
64位读取注册表与32位的区别
查看>>
7. DateTime,TimeSpan
查看>>
一起谈.NET技术,C#中使用#region指令的一些想法
查看>>
iOS json数据解析
查看>>
php关于精准计算的模块 BCMath
查看>>
【Android的从零单排开发日记】——Android数据存储(上)
查看>>
subversion配置(ubuntu,debian)
查看>>
SAMBA 共享服务器搭建
查看>>
windows安装React Native开发运行环境
查看>>
sharepoint 中根据loginName获取displayName以及用户信息 .
查看>>
t - sql的阶梯:超越基础水平9:动态t - sql代码
查看>>
第十一周进度条
查看>>
1140 - How Many Zeroes?
查看>>
【 一次性密码】TOTP
查看>>
java多线程细微知识点
查看>>
文档对象模型DOM(二)
查看>>
【Single Num II】cpp
查看>>
【 Sqrt(x) 】cpp
查看>>
第十七章: 自定义View
查看>>
从两个数组中查找相同的数字谈Hashtable
查看>>