Python趣味创意编程

978-7-115-55175-7
作者: 童晶
译者:
编辑: 陈冀康
分类: Python

图书目录:

详情

本书基于Python编程,实现了15个有趣的互动场景,循序渐进地向读者展示了这些场景的实现过程,帮助读者掌握Python编程。全书共16章,讲解了Python基本语句、算术运算符、字符串、循环、全局变量、选择判断、随机函数、列表、函数、复合运算符、递归、面向对象编程等入门知识,同时涉及Processing软件的配置、绘制、帧率、鼠标键盘互动、字符串处理、文字处理、音视频处理等使用方法。此外还简要介绍了RGB颜色模型、HSB颜色模型、图像、人脸检测的基本概念,方便读者利用自己的创意来进行进一步的发挥和创造。附录A给出了书中练习题的参考答案,附录B给出了书中基本概念的索引。

图书摘要

版权信息

书名:Python趣味创意编程

ISBN:978-7-115-55175-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    童 晶

责任编辑 陈冀康

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


本书基于Python编程,实现了15个有趣的互动场景,循序渐进地向读者展示了这些场景的实现过程,帮助读者学习和掌握Python编程。全书共16章,讲解了Python基本语句、算术运算符、字符串、循环、全局变量、选择判断、随机函数、列表、函数、复合运算符、递归、面向对象编程等入门知识,同时涉及Processing软件的配置、绘制、帧率、鼠标键盘互动、字符串处理、文字处理、音视频处理等使用方法。此外还简要介绍了RGB颜色模型、HSB颜色模型、图像、人脸检测的基本概念,方便读者利用自己的创意来进行进一步的发挥和创造。附录A给出了书中练习题的参考答案,附录B给出了书中基本概念的索引。

本书适合对Python编程、互动艺术、创意编程、Processing开发感兴趣的读者阅读,也可以作为中学生、大学生互动艺术课程的教材和程序设计课程的参考教材。


随着人工智能时代的来临,计算机软件在日常生活中起到越来越重要的作用,编写计算机程序极有可能成为未来社会的一项重要生存技能。在众多的文本式编程语言中,Python语法简单、上手容易、功能强大、应用广泛,越来越得到初学者的青睐。

然而,目前大部分Python图书都会先系统讲解语法知识,知识量大,读者学习困难;所举实例一般偏数学算法,过于抽象,趣味性不强,读者不愿写程序,进而觉得入门困难。也有部分图书基于海龟绘图,利用代码绘制几何图形吸引读者兴趣;然而海龟绘图功能简单、不支持互动、趣味性一般。

针对以上问题,本书把互动艺术、创意编程应用于Python教学,通过15个由易到难的有趣案例,带领读者从零基础开始学习。书中不安排专门章节讲解语法知识,而是穿插在互动创意程序开发的过程中,通过具体案例逐步学习新的语法知识,便于读者理解,并在实际应用中体会。书中案例经过精心的设计,所有代码均不超过100行,适合上手。学习编程时,读者看到用Python可以编出好看、好玩的程序,感到有趣、有成就感,就会自己钻研,与他人积极互动,学习效果也会得到显著提升。

本书通过创意编程案例逐步引入语法知识,用Python从无到有地开发,提升读者对编程的兴趣和能力。全书共16章和两个附录。

第1章介绍了计算机程序和Python编程语言的基本概念,介绍了互动艺术开发工具Processing的下载安装。

第2章介绍了整数、变量、算术运算符等语法知识,实现了一个转动眼珠的圆脸(20行代码)。

第3章介绍了for循环语句、整除、取余等语法知识,实现了催眠的同心圆(12行代码)。

第4章介绍了if选择判断、比较大小运算符、逻辑运算符等语法知识,实现了旋转的圆弧(23行代码)。

第5章介绍了类型转换,实现了鼠标交互的简易毛笔字(52行代码)。

第6章介绍了循环嵌套、中文字符串处理,实现了旋转的方块(19行代码)。

第7章介绍了随机函数、RGB颜色模型,实现了随机扭动的曲线(33行代码)。

第8章介绍了列表,实现了随风飘动的多个粒子(38行代码)。

第9章介绍了无参数函数的定义、复合运算符,实现了互相作用的圆球(52行代码)。

第10章介绍了带参数的函数、HSB颜色模型,实现了随机山水画(52行代码)。

第11章介绍了函数的递归调用、if-elif-else语句,绘制了递归分形树(62行代码)。

第12章介绍了面向对象编程,包括类和对象、成员变量、成员函数、构造函数等语法知识,实现了粒子同心圆(43行代码)。

第13章介绍了while循环语句、图像的基本概念,实现了图像像素采样效果(28行代码)。

第14章介绍了字符串元素的处理,实现了定制字符画的效果(34行代码)。

第15章利用Minim库进行音频信号的处理,实现了一种音乐可视化的效果(60行代码)。

第16章利用Video库进行摄像头视频的获取与处理、OpenCV库进行人脸的实时检测跟踪,实现了坚持一百秒的体感游戏(98行代码)。

附录A给出了书中所有练习题的参考答案。

附录B列出了Python语法知识在书中出现的对应位置。

和市面上同类图书相比,本书有以下几个鲜明的特色。

本书适合任何对计算机编程感兴趣的人,不论是孩子还是家长、学生还是职场人士。

本书适合学习过其他编程语言,想快速学习Python的人。

本书可以作为中学生和大学生学习程序设计的教材、培训机构的参考教材,也可以作为编程爱好者的自学用书。

本书适合对互动艺术、创意编程、Processing开发感兴趣的人,也可以作为中学生、大学生互动艺术课程的学习教材。

每章的开头会介绍该章案例效果、实现的主要思路。读者可以先观看对应的效果视频、运行最终版本的代码,对本章的学习目标有个直观的了解。

创意编程案例会分成多个步骤,从零开始一步一步实现,书中列出了每个步骤的实现目标、实现思路、相应的参考代码。读者可以先在前一个步骤代码的基础上,尝试写出下一个步骤的代码,碰到困难可以参考电子资源中的示例代码、讲解视频。

在语法知识、案例的讲解后会列出一些练习题,读者也可以先自己实践,再参考附录A中给出的答案。每章小结给出的进一步实践方向,读者也可以根据自己的兴趣尝试。

读者可以利用附录B查阅相应的Python语法知识,对于本书没有涉及的内容,读者也可以在线搜索,或者咨询周围的老师、同学。

本书提供了所有案例的分步骤代码、练习题参考答案、图片音效素材、演示视频,读者可以从异步社区下载。

童晶,浙江大学计算机专业博士,河海大学计算机系副教授、硕士生导师,中科院兼职副研究员。主要从事计算机图形学、数字化艺术、虚拟现实、三维打印等方向的研究,发表学术论文30余篇,曾获中国发明创业成果奖一等奖、浙江省自然科学奖二等奖、常州市自然科学优秀科技论文一等奖。

具有15年的一线编程教学经验,被评为河海大学优秀主讲教师。开设课程在校内广受好评,在知乎、网易云课堂、中国大学MOOC等线上平台已有上百万次的阅读量与学习量。

积极投身教学与学生创新,指导学生获得英特尔嵌入式比赛全国一等奖、“挑战杯”全国三等奖、“中国软件杯”全国一等奖、中国大学生服务外包大赛全国一等奖等众多奖项。

首先感谢我的学生们,当老师最有成就感的就是看到学生成长并得到学生的认可。也是你们的支持和鼓励,让我在漫长的写作过程中坚持下来。

感谢人民邮电出版社的陈冀康编辑,本书是在他的一再推动下完成的。

最后感谢我的家人,在这个不平凡的夏天支持我埋头写作。

作者

2020年6月


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供以下资源:

要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入错误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


如今,我们的生活已经离不开程序,用计算机写文章、做PPT、看新闻、用手机聊天、听音乐、玩游戏,甚至电冰箱、空调、汽车、飞机上,都运行着各种各样的程序。

所谓计算机程序,就是指让计算机可以执行的指令。我们和外国人交流,可能会需要使用外语;而要让计算机执行相应的任务,则必须用计算机能够理解的语言。

和人类的语言一样,计算机能懂的语言(也称为编程语言)有很多种。在众多编程语言中,Python语法简单、上手容易。图1-1为用C、Python两种编程语言让计算机输出“你好”的代码,可以看出Python的实现要简单很多。

另外,Python的功能强大,且被广泛应用于人工智能、网络爬虫、数据分析、网站开发、系统运维、游戏开发、互动艺术等多个领域,成为近年来最为热门的编程语言之一。

图1-1

要编写Python代码,让计算机读懂Python程序,我们还需要安装Python开发环境,本书利用Processing进行Python的编程学习。

Processing诞生于美国麻省理工学院媒体实验室,其以数字化艺术为背景,可以利用编程实现多种形式的互动艺术。读者可以打开Processing官方网站,找到合适的版本下载,如图1-2所示。

图1-2

如果读者电脑为Windows 64位版本,则可以点击下载对应的processing-3.5.4-windows64.zip文件。解压后,双击processing.exe打开Processing程序,界面如图1-3所示。

Processing默认编程语言为Java,为了能用Python语言进行编程,点击右上角的Java,在弹出菜单中选择“添加模式”,如图1-4所示。

图1-3

图1-4

在弹出的窗口中,选择“Python Mode for Processing 3”,点击“Install”,Processing会自动下载配置,直到安装成功,如图1-5所示。

图1-5

点击右上角选择“Python”模式,然后点击左上角运行按钮,Processing会弹出一个小窗口,说明配置成功,如图1-6所示。

图1-6

点击运行按钮右侧的停止按钮,小窗口自动关闭。

提示

如果Python Mode下载速度过慢,读者也可以在GitHub搜索“processing. py”并直接下载文件,将其复制到“文件”—“偏好设定”—“速写本位置”的对应目录下,重启Processing,即可以直接使用Python编程模式。

这一章主要阐明了计算机程序和Python编程语言的基本概念,介绍了Processing的下载、配置方法,第2章起我们将开始趣味创意编程的学习开发。


本章我们将实现一个转动眼珠的圆脸,利用圆圈绘制一个圆脸,眼珠随着鼠标移动而转动,效果如图2-1所示。

图2-1

我们首先实现圆的绘制,同时学习整数和算术运算符;然后学习变量的定义和使用,并设定背景和圆的亮度;接着实现跟随鼠标移动的圆圈,从而实现转动的眼珠;最后综合利用所学知识,实现转动眼珠的圆脸。

本章案例最终代码一共20行,代码参看“配套资源\第2章\sketch_2_8_3\ sketch_2_8_3.pyde”,视频效果参看“配套资源\第2章\转动眼珠的圆脸 .mp4”。

读者可以在Processing中键入以下代码,并点击运行按钮,如图2-2所示。

sketch_2_1_1.pyde

 1    circle(50, 50, 80)

图2-2

运行效果如图2-3所示,在窗口中画了一个圆。

circle(50, 50, 80)语句绘制了一个圆圈。circle为圆的英文单词,圆括号中的三个参数,(50, 50)表示圆的中心位置坐标,80表示圆的直径[1]

图2-3

提示

Python语句中的标点符号,比如sketch_2_1_1.pyde中的括号“()”、逗号“,”都是英文标点符号(即半角标点符号),如果输入的是中文标点符号(即全角标点符号),则会提示程序错误。

提示

如果读者编写代码出错,可以参考本书配套电子资源中的代码。注意Processing的代码文件需要保存在其同名的文件夹下,如sketch_2_1_1.pyde保存在“第2章\ sketch_2_1_1\”目录下。

图2-3中程序绘制区域的大小默认为宽100px、高100px。键入以下代码,可以设置程序窗口的大小(size):

sketch_2_1_2.pyde

 1    size(640,480)
 2    circle(50, 50, 80)

size(640,480)设定窗口的宽度640px、高度480px,运行效果如图2-4所示。

图2-4

程序窗口的绘制区域采用直角坐标系,左上角的坐标为(0,0)。横轴方向由X坐标表示,取值范围为0~640;纵轴坐标由Y坐标表示,取值范围为0~480。窗口中任一点的位置可由其(X,Y)坐标来表示。

修改圆心坐标,我们可以在窗口正中心绘制一个圆(如图2-5所示):

sketch_2_1_3.pyde

 1    size(640,480)
 2    circle(320, 240, 80)

图2-5

也可以修改圆的直径,绘制更大一些的圆圈(如图2-6所示):

sketch_2_1_4.pyde

 1    size(640,480)
 2    circle(320, 240, 200)

图2-6

练习2-1:修改sketch_2_1_4.pyde,绘制出图2-7中的绘制效果。

图2-7

输入以下代码:

sketch_2_2_1.pyde

 1    print(100)

运行后Processing下方的控制台内输出“100”,如图2-8所示。

图2-8

100为整数,print()函数可以将括号内的数值在控制台输出出来。另外,整数之间也可以进行加、减、乘、除四则运算,在Python中分别用+、-、*、/ 四个符号表示:

sketch_2_2_2.pyde

 1    print(1+1)
 2    print(7-4)
 3    print(3*2)
 4    print(18/2)

运行后输出:

要让圆圈正好在画面中间(如图2-9所示),我们可以利用除法:

sketch_2_2_3.pyde

 1    size(640,480)
 2    circle(640/2, 480/2, 480)

图2-9

利用多个circle()语句,可以绘制多个圆圈。运行以下代码,即可在对应坐标位置绘制出图2-10中所示的三个圆圈。

sketch_2_3_1.pyde

 1    size(600,400)
 2    circle(150, 200, 50)
 3    circle(300, 200, 50)
 4    circle(450, 200, 50)

图2-10

我们可以修改代码,将这三个圆圈变大(如图2-11所示):

sketch_2_3_2.pyde

 1    size(600,400)
 2    circle(150, 200, 100)
 3    circle(300, 200, 100)
 4    circle(450, 200, 100)

图2-11

练习2-2:编写代码,绘制出图2-12所示的同心圆。

图2-12

提示

后画的图形会覆盖在先前画的图形上面,所以要先画大圆,再画小圆。

sketch_2_3_2.pyde中修改三个圆的直径,要修改三个数字,能否有更简单的方法?本节学习变量的概念,利用变量来存储、修改多个圆圈的参数。

变量可以记录程序中的一些内容,比如:

sketch_2_4_1.pyde

 1    diameter = 100
 2    print(diameter)

diameter就是一个变量,这里记录了数字100的信息。print(diameter)函数可以输出变量所存储的内容。点击运行,Processing的控制台输出:

变量的值也可以进行修改,不同变量之间也可以相互赋值。

sketch_2_4_2.pyde

 1    r = 1
 2    print(r)
 3    r = 2
 4    print(r)
 5    t = r
 6    print(t)

运行后输出:

其中t = r表示将变量r的值赋给变量t,运行第5行代码后,变量t的值也等于2。

变量和数字之间,也支持加、减、乘、除运算,在Python中分别用+、-、*、/四个符号来表示:

sketch_2_4_3.pyde

 1    r = 1
 2    print(r)
 3    r = r+2
 4    print(r)
 5    t = r-1
 6    print(t)
 7    t = t*3
 8    print(t)
 9    s = t/(r-1)
10    print(s)

运行后输出:

提示

变量的名字可以是字母、下划线、数字组成,开头不能是数字。变量名不能使用Processing及Python中已经使用的关键词,比如circle、size、print。另外,变量中大写字母、小写字母是区分的,不同的大小写表示不同的变量。

应用变量diameter记录圆圈的直径,将sketch_2_3_1.pyde修改为:

sketch_2_4_4.pyde

 1    size(600,400)
 2    diameter = 50
 3    circle(150, 200, diameter)
 4    circle(300, 200, diameter)
 5    circle(450, 200, diameter)

运行效果同sketch_2_3_1.pyde一样,如图2-13所示。

图2-13

只需将sketch_2_4_4.pyde第2行代码修改为:diameter = 150,即可同时修改三个圆圈的直径大小,如图2-14所示。

图2-14

Processing还提供了两个系统变量width、height,表示画面的宽度、高度,读者可以输入并运行以下代码:

sketch_2_4_5.pyde

 1    size(600,400)
 2    print(width)
 3    print(height)

输出画面的宽度和高度:

利用width、height,可以修改sketch_2_4_4.pyde,让三个小圆圈均匀分布在画面中间:

sketch_2_4_6.pyde

 1    size(600,400)
 2    diameter = 50
 3    circle(1*width/4, height/2, diameter)
 4    circle(2*width/4, height/2, diameter)
 5    circle(3*width/4, height/2, diameter)

读者可以设置size()中画面的宽度、高度,修改圆圈直径大小,三个圆圈仍然均匀分布在画面中(如图2-15所示):

sketch_2_4_7.pyde

 1    size(800,400)
 2    diameter = 150
 3    circle(1*width/4, height/2, diameter)
 4    circle(2*width/4, height/2, diameter)
 5    circle(3*width/4, height/2, diameter)

图2-15

分别输入并运行以下代码,可以得到图2-16的对应效果:

sketch_2_5_1.pyde

 1    size(200,200)
 2    background(0)

sketch_2_5_2.pyde

 1    size(200,200)
 2    background(100)

sketch_2_5_3.pyde

 1    size(200,200)
 2    background(255)

background(0)     background(100)     background(255)
图2-16

其中background()函数可以设定背景的亮度:数字0为最暗,显示纯黑色;255为最亮,显示纯白色;(0,255)之间的数字显示灰色,数值越大亮度越高。

另外,也可以利用fill()函数,设置绘制圆圈的颜色:

sketch_2_5_4.pyde

 1    size(800,400)
 2    background(255)
 3    diameter = 150
 4    fill(200)
 5    circle(1*width/4, height/2, diameter)
 6    fill(100)
 7    circle(2*width/4, height/2, diameter)
 8    fill(0)
 9    circle(3*width/4, height/2, diameter)

运行效果如图2-17所示:

图2-17

代码第2行background(255)设置背景为白色。

第4行fill(200)设定亮度为200,第5行以此亮度绘制最左边的圆圈。

第6行fill(100)设定亮度为100,第7行以此亮度绘制中间的圆圈。

第8行fill(0)设定亮度为0,第9行以此亮度绘制最右边的圆圈。

提示

不利用background()、fill()函数设置时,Processing默认背景为灰色、圆圈等图形填充为白色。

练习2-3:编写代码,绘制出图2-18所示的同心圆。

图2-18

输入并运行以下代码,运行效果如图2-19所示。

sketch_2_6_1.pyde

 1    def setup():
 2        size(600, 600)
 3    
 4    def draw():
 5        circle(300,300,100)

图2-19

def setup(): 表示定义初始化函数,冒号后面的语句进行具体初始化的工作。size(600, 600)表示设定窗口宽600px、高600px。

def draw(): 表示定义绘制函数,冒号后面的语句进行具体绘制的工作。circle(300,300,100)表示在(300,300)处绘制了一个直径为100的圆圈。

程序运行时仅运行一次setup()函数,进行相关的初始化设定。初始化后每帧重复执行draw()函数,进行相关的绘制工作。

提示

函数内的语句需要缩进,比如setup()函数内的size(600, 600)语句前面要空出一些,draw()函数内的circle(300,300,100)语句前面也要空出一些。Python中可以用空格,或者Tab键来实现代码向右缩进。同一函数内部的多行语句,需要缩进一致,即最左边需要对齐。

Processing还提供了两个系统变量mouseX、mouseY,表示鼠标位置的XY坐标。读者可以输入并运行以下代码,需要注意变量名的大小写:

sketch_2_6_2.pyde

 1    def setup():
 2        size(600, 600)
 3    
 4    def draw():
 5        circle(mouseX,mouseY,100)

circle(mouseX,mouseY,100)在鼠标位置处绘制直径为100的圆。由于draw()函数每帧重复执行,当鼠标在窗口中移动时,会在不同位置绘制相应的圆圈,如图2-20所示。

图2-20

如果想画面中只显示一个圆圈跟随鼠标移动,可以在draw()函数中添加background()函数:

sketch_2_6_3.pyde

 1    def setup():
 2        size(600, 600) 
 3    
 4    def draw():
 5        background(200)
 6        circle(mouseX,mouseY,100)

draw()函数每次绘制时,首先用灰色填充整个画面,然后在鼠标位置处绘制一个圆圈,效果如图2-21所示。

图2-21

首先绘制如图2-22所示的两个圆圈,并让较小的黑色圆圈跟随鼠标位置移动:

sketch_2_7_1.pyde

 1    def setup():
 2        size(600, 600)
 3    
 4    def draw():
 5        background(255)
 6        fill(235)
 7        circle(300,300,200)
 8        fill(0)
 9        circle(mouseX,mouseY,100)

图2-22

为了让黑色圆圈的移动范围不超出灰色圆圈的范围,可以使用Processing提供的map()函数:

sketch_2_7_2.pyde

 1    def setup():
 2        size(600, 600) 
 3    
 4    def draw():
 5        background(255)
 6        fill(235)
 7        circle(300,300,200)
 8        fill(0)
 9        x = map(mouseX,0,width,260,340)
10        y = map(mouseY,0,height,260,340)
11        circle(x,y,100)

鼠标水平方向坐标mouseX的取值范围为[0,width];为了防止黑色小圆圈超出范围,设定其圆心的x坐标范围为[260,340]。map(mouseX,0,width, 260,340)函数即把范围[0,width]内的mouseX等比例的映射到范围[260,340]内,如图2-23所示。

对于纵坐标,map(mouseY,0,height,260,340)函数即把范围[0,height]内的mouseY等比例的映射到范围[260,340]内。

图2-23

提示

当读者不熟悉Processing的某些函数时,可以点击“Help”—“References”获取帮助,如图2-24所示。

图2-24

Processing会在浏览器中打开帮助网页,如图2-25所示。

图2-25

读者可以找到“map()”,点击查看详细的帮助文档,如图2-26所示。

也可以点击网页左侧的“Tutorials”或“Examples”,查看更多的帮助、示例代码信息。

图2-26

在sketch_2_7_2.pyde基础上添加一个圆圈,可以实现眼珠随鼠标转动的效果(如图2-27所示):

sketch_2_7_3.pyde

 1    def setup():
 2        size(600, 600)
 3        
 4    def draw():
 5        background(255)
 6        fill(180)
 7        circle(300,300,300)
 8        fill(235)
 9        x1 = map(mouseX,0,width,260,340)
10        y1 = map(mouseY,0,height,260,340)
11        circle(x1,y1,200)
12        fill(0)
13        x2 = map(mouseX,0,width,220,380)
14        y2 = map(mouseY,0,height,220,380)
15        circle(x2,y2,100)

图2-27

以下代码用圆圈绘制一个如图2-28所示的圆脸,读者可以尝试理解:

sketch_2_8_1.pyde

 1    def setup():
 2        size(800, 600)
 3    
 4    def draw():
 5        background(255)
 6        fill(255)
 7        circle(400, 300, 500)
 8        circle(305, 180, 180)
 9        circle(495, 180, 180)
10        circle(400, 300, 40)
11        circle(400, 420, 140)
12        fill(0)
13        circle(275, 180, 110)
14        circle(465, 180, 110)

图2-28

添加代码,让眼珠随着鼠标而转动:

sketch_2_8_2.pyde

 1    def setup():
 2        size(800, 600)
 3    
 4    def draw():
 5        background(255)
 6        fill(255)
 7        circle(400, 300, 500)
 8        circle(305, 180, 180)
 9        circle(495, 180, 180)
10        circle(400, 300, 40)
11        circle(400, 420, 140)
12        fill(0)
13        x1 = map(mouseX,0,width,280,330)
14        y1 = map(mouseY,0,height,155,195)
15        circle(x1, y1, 110)
16        x2 = map(mouseX,0,width,470,520)
17        y2 = map(mouseY,0,height,155,195)
18        circle(x2, y2, 110)

当我们的代码比较多时,可以适当加一些注释。所谓注释,就是一些说明的文字,不参与程序运行。注释的格式是“# 注释内容”。以下为加上注释的完整代码,这样就可以比较清楚地了解各种代码的功能、变量的含义等信息:

sketch_2_8_3.pyde

 1    def setup(): # 初始化函数,仅运行一次
 2        size(800, 600) # 设定画面宽度、高度
 3    
 4    def draw(): # 绘制函数,每帧重复运行
 5        background(255) # 设置白色背景,并覆盖整个画面
 6        fill(255) # 设置填充色为白色(默认黑色线条)
 7        circle(400, 300, 500) # 绘制圆脸
 8        circle(305, 180, 180) # 绘制左眼边框
 9        circle(495, 180, 180) # 绘制右眼边框
10        circle(400, 300, 40) # 绘制鼻子
11        circle(400, 420, 140) # 绘制嘴巴
12        fill(0) # 设置填充色为黑色(用于绘制眼珠)
13        # 将鼠标位置映射为左眼珠坐标
14        x1 = map(mouseX,0,width,280,330) 
15        y1 = map(mouseY,0,height,155,195)
16        circle(x1, y1, 110) # 绘制左眼珠
17        # 将鼠标位置映射为右眼珠坐标
18        x2 = map(mouseX,0,width,470,520)
19        y2 = map(mouseY,0,height,155,195)
20        circle(x2, y2, 110) # 绘制右眼珠

这一章主要讲解了整数、变量、算术运算符等语法知识,介绍了绘制圆圈、设置亮度、鼠标坐标等用法。利用这些知识,实现一个转动眼珠的圆脸。读者也可以尝试利用本章所学知识,尝试用圆圈组合出其他有趣的互动图形。

[1] 上述数值均以像素(px)为单位,参见第13章。——编者注


相关图书

深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
动手学自然语言处理
动手学自然语言处理
Web应用安全
Web应用安全
Python高性能编程(第2版)
Python高性能编程(第2版)
图像处理与计算机视觉实践——基于OpenCV和Python
图像处理与计算机视觉实践——基于OpenCV和Python
Python数据科学实战
Python数据科学实战

相关文章

相关课程