首页>参考读物>计算机科学与技术>软件与程序设计

Python计算与编程实践:多媒体方法(原书第2版)
作者 : (美)Mark Guzdial,Barbara Ericson 著
译者 : 王江平 译
丛书名 : 计算机科学丛书
出版日期 : 2012-07-02
ISBN : 978-7-111-38738-1
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 352
开本 : 16
原书名 : Introduction to Computing and Programming in Python, A Multimedia Approach,Second Edition
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Python可移植、功能强大、易于使用,是编写独立应用程序和脚本应用程序的理想选择。通过学习本书,你可以迅速高效地精通核心Python语言基础。本书深入解析了Python语言,透析了应用开发的方方面面,详细讲解了Python语言的基本要点和基础类库,内容覆盖GUI、数据库、Web、系统管理、网络编程、图像处理、游戏开发等领域,通过丰富的典型应用实例,引领读者迅速掌握实用技术。本书引入了一种创建和操纵多媒体方法的Python编程方式,这是一种对上下文友好的编程方式。本书从实际的编程应用开始介绍,在上下文中进行编程(例如通信计算)。通过学习本书的内容,读者可以学到:制作如同Photoshop般的图片效果、剪辑声音、创作动画等内容,同时介绍了如何关心网站的读者,并就编写HTML提出了自己的见解。本书阐述了如何使用Web作为数据源,向网站的浏览者展示如何从文件中读取数据,如何编写程序直接从其他网站读取数据等内容,例如温度、天气、金融、股票价格等。

图书特色

Python计算与编程实践
多媒体方法
(原书第2版)
Introduction to Computing and Programming in Python
A Multimedia Approach
Second Edition
(美) Mark Guzdial  Barbara Ericson 著 王江平 译

计算机程序设计课程往往是枯燥乏味的,而本书根据教育理论,开发了一种新的教学方法,介绍如何通过多媒体编程来学习计算机程序设计,将趣味性和实用性融于枯燥的编程课程的教学当中。本书方法独特新颖,实例通俗易懂,可帮助读者快速入门并深入掌握编程技能,是一本理论联系实际的程序设计教程。
本书使用的编程语言是Python,这是因为Python强大实用(比如网站开发)、易于入门,计算机科学专业和非专业人士都可以学习。本书以Python数字多媒体编程为主线,从图像、声音、文本和电影这些学生已经熟知的内容开始,讲解它们的处理方法,其中穿插介绍计算机科学与程序设计的基础知识。在讲解知识点的时候也独具匠心,先介绍容易理解的基本概念,如赋值、顺序操作、迭代、条件式、函数定义等,逐步涉及抽象内容,如算法复杂度、程序效率、计算机组成、层次式分解、递归、面向对象等。本书还提供了大量例题和习题,方便教学。

作者简介
Mark Guzdial 是佐治亚理工学院计算机学院交互式计算专业的教授。他是ACM国际计算机教育研究系列研讨会的创立者之一,ACM教育委员会副主席,“Journal of the Learning Sciences”和“Communications of the ACM”编委会委员。Guzdial博士主要关注计算机教育方面的研究。他的第一本著作论述Squeak语言及其在教育中的应用。他是Swiki(Squeak Wiki)的早期开发者,Swiki是第一个专门用于学校的wiki。他出版了多本关于利用多媒体编程环境学习计算机编程的著作,影响了世界各地的计算机本科生教学。
Barbara Ericson 是佐治亚理工学院计算机学院“计算机普及”课程的主管和研究人员。她从2004年开始就致力于改善计算机基础教育,现在是计算机科学教师协会的师范教育代表,美国女性信息技术中心K-12联盟的合作主席,计算机科学AP考试开发委员会成员。她的研究兴趣涉及计算机图形学、人工智能和面向对象编程等多个领域。

图书前言

第2版前言
Introduction to Computing and Programming in Python: A Multimedia Approach, 2E
  感谢大家对本书第1版的兴趣,正是大家的热情支持我们完成了第2版。感谢那些不知道名字的朋友提供的阅读评论,这些评论指导我们完成了本次修订。
  第1版和第2版的主要区别如下:
  1)增加了对Python语言的覆盖面,包括更多标准库方面的话题、全局域和更多的控制结构。
  2)更加强调了抽象代码和可复用代码。
  3)第13章增加了一些内容,指导大家制作标准的AVI或QuickTime电影与他人分享。
  4)每章结尾处大大增加了练习题的数量。
  5)所有的下标都改为从0开始,而不是从1开始。使用0,而不是1作为第一个下标,与标准Python更兼容。
  6)去掉了使用Swing创建用户界面和介绍JavaScript的一章。
  7)重写了关于设计和调试的一章,加入了设计和测试示例,强调了维护。
  8)把创建和修改文本的一章拆成了两章。增加了有关隐写术(steganography)的例子。
  9)把关于语言范式(编程风格)的一章拆成了两章,以提供更多关于函数式编程(比如非可变函数:non-mutable function)和面向对象编程(使用与Logo中类似的小海龟来介绍对象)的内容。
  10)增加了更多教师们希望在导论课中提及的概念,比如负数的二进制表示。
  11)整体上,语言描述更加清晰,删掉了一些不必要的细节。(希望如此。)
  12)所有软件和素材的最新版本可从http://mediacomputation.org网站找到。
  第2版增加了一位合著者为本书的写作出版带来了美好的回忆。

Mark Guzdial和Barbara Ericson
佐治亚理工学院


第1版前言
Introduction to Computing and Programming in Python: A Multimedia Approach, 2E
  计算机教育方面的研究表明:人们不只是“学习编程”,而是学习编程去实现某种事物[5,22],而做事动机的不同会决定人们是否学习编程[8]。每一位教师都面临着一个挑战:挑选某种事物来激发学习编程的兴趣,且要有足够强大的激发效果。
  人们需要交流,交流的欲望是首要兴趣之一。人们逐渐将计算机更多地用做交流工具,而不是计算工具。今天,所有公开发行的文本、图像、声音、音乐和电影基本上都是用计算机技术制作的。
  本书教大家如何编写程序,从而实现用数字媒体进行的交流。本书关注的是如何像专业程序员那样处理图像、声音、文本和电影,但使用的却是连学生都能写的程序。我们知道,大多数人会使用专业级的应用软件来实现这种类型的数字媒体处理。然而,懂得如何自己编写程序意味着你能做更多事情,而不是只能做手边的应用程序所支持的那些事情。你的表达能力不会受应用程序的限制。
  还有一点:了解数字媒体应用程序中算法的工作原理会让你更好地使用它们,或者更方便地从一种应用程序转向另一种应用程序。对应用程序来说,如果你关心的是哪个菜单项做哪些事情,那么每种应用程序都是不同的。相反,如果你关心的是按自己喜欢的方式来调整像素的位置和颜色,那么,透过菜单项关注自己想要表达的东西可能会更容易。
  本书不只讲数字媒体编程。处理数字媒体的程序实现起来并不容易,即使实现了其行为也可能出乎你的意料。问题自然就来了,比如“同样的图像为什么在Photoshop中做滤镜操作速度更快?”或者“这太难调试了—有更容易调试的编程方法吗?”回答这样的问题是计算机科学家的事情。本书末尾有好几章讲到了计算,而不只是编程。最后的这几章内容从数字媒体处理延伸到了更一般的话题。
  计算机是人类设计出来的、最令人惊叹的创造性设备。它完全由精神素材(mind-stuff)构成。“与其梦想它,不如成为它”的理念在计算机上完全可行。只要能想象一件事,就可以让它在计算机上成为“现实”。玩转编程可以是、也应该是极大的乐趣。
致教师
  本书的内容符合ACM/IEEE计算机课程2001(Computing Curriculum 2001)标准文档[4]中描述的“从命令式开始”的要求。内容从赋值、顺序操作、迭代、条件式和函数定义这样的基础内容开始。当学生掌握这些内容之后,才强调抽象内容(如算法复杂度、程序效率、计算机组成、层次式分解、递归和面向对象编程)。
  这种非常规的教学次序依据的是学习科学(learning science)中的研究发现:记忆是关联性的。我们记忆新的东西靠的是把它跟旧的东西关联起来。基于“将来某天可能有用”的假定,人们能学会概念和技巧,但这些概念和技巧只跟那个假定相关联。结果就像所谓的“脆弱知识”(brittle knowledge)[9]—这种知识能让你通过考试,但你很快会忘记它,因为除了在那堂课上听过它之外,没有其他事情与之关联了。
  如果概念和技巧能跟许多不同的思想关联起来,或者跟日常生活中的想法关联起来,那么记忆就会更牢固。想让学生获得可转移的知识(transferable knowledge,即可在新情形中运用的知识),我们必须帮助他们把新知识和更一般的问题关联起来,这样,记忆就可以通过关联这些问题来索引它们[26]。本书中,我们通过学生可以考察、关联(比如在消除照片红眼效果时使用的条件式),之后再在上面叠加抽象(比如分别使用递归和函数式滤镜加映射来达到同样的目标)的具体体验来讲解计算与编程。
  我们知道,对学习计算机的学生来说,从抽象起步效果并不好。Ann Fleury揭示了这样的事实:如果讲封装和复用[13],那么计算机导论课上的学生根本听不懂。学生们更喜欢便于跟踪的简单代码,而且真正认为这样的代码更好。学生们需要时间和经验来理解设计良好的系统所包含的价值。没有经验,学生们很难学习抽象。
  本书采用的多媒体计算教学方法从一些常见任务开始,如图像处理、考察数字音乐、查看和制作网页、制作视频等,许多人都用计算机做这些事。然后,我们基于这些活动解释编程和计算。我们想让学生在访问Amazon(打个比方)网站时会想到:“这是个网上书店—我知道它是用数据库和把数据库实体格式化成网页的一组程序来实现的。”我们想让学生在使用Adobe Photoshop和GIMP时,思考图像滤镜是如何实际处理一个像素的红、绿、蓝颜色分量的。从一个有意义的上下文开始,知识和技能更容易传递。它也使书中的例子更有意思、更能激发学生兴趣,这些都有助于学生上课时集中精力。
  基于多媒体计算的教学方法将大约2/3的时间花在多媒体的体验上,在一个能调动学习兴趣的环境中让学生获得各种不同媒体的经验。在这2/3以后,他们自然会问一些与计算有关的问题,典型的问题如“为什么Photoshop比我的程序快?”或者“电影的代码很慢—为什么会这么慢?”此时,我们会引入抽象和来自计算机科学的真知灼见来回答他们的问题。那是本书最后一部分的内容。
  另外一个计算机教育领域的研究团体考察了计算机导论课的退课率和失败率居高不下的原因。一种常见的论点是:计算机课程看上去“不切实际”,而且过分关注诸如效率之类“单调乏味的细节”[1,31]。然而,学生们认为(在问卷调查和面谈中告诉我们的)与交流有关的上下文是切合实际的。这个切合实际的上下文部分地解释了我们在佐治亚理工学院(Georgia Tech)导论课程上的长期成功的原因,本书就是为这一课程写就的。
  在本书采用的教学方法中,知识次序的不同不只体现在最后介绍抽象这一点上。我们在第3章的第一个重要程序中就开始使用数组和矩阵。通常,“计算机导论”课程都会把数组的知识推到后面,因为它们明显比保存简单数值的变量复杂。一种既切合实际又具体可行的上下文是非常强大的[22]。我们发现学生们处理图片中的像素矩阵完全没有问题。
  据统计,“计算机导论”课程中,学生们退课或得到D、F分数的比率(通常称为WDF率)处在30%~50%的范围或更高。根据最近一项针对计算机导论课程失败率的全球性调查,美国54所大学的平均失败率为33%,17所国际大学的平均失败率为17%[6]。在佐治亚理工学院,从2000年到2002年,所有专业要求的导论课程中,平均WDF率为28%。我们在自己的“媒体计算导论”(Introduction to Media Computation)课程中使用了本教程的第1版。首次试开这门课的时候,有121名学生选修,其中没有计算机或工程专业的学生,而且2/3是女生。最终我们的WDF率只有11.5%。
  之后的两年里(从2003年春到2005年秋),我们的课程在佐治亚理工学院的平均WDF率(多位讲师,数千名学生)为15%[21]。事实上,之前28%的WDF率与现在15%的WDF率是没有可比性的,因为所有专业都采用了之前的课程,只有人文、建筑和管理专业采用了新课程。个别专业取得了更显著的变化。比如,管理专业在1999~2003年采用较早的课程时,WDF率为51.5%,而采用新课程的两年中只有11.2%的失败率[21]。自本书第1版发行之后,其他几所学校也采用了这种方法并根据自身的情形做了调整而且评估了结果,他们在成功率上都取得了类似的显著进步[36,37]。
怎样使用本书
  本书以基本一致的次序呈现了我们在佐治亚理工学院的授课内容。个别老师可能会跳过某些章节(比如有关加法合成、MIDI和MP3的部分),不过,所有的内容我们都在自己的学生身上试讲过的。
  然而,本书的使用并非仅限于此,还有人以其他方式使用过它:
   只用第2章和第3章就可以对计算做个简单介绍,或者还需要第4章、第5章的一些内容。甚至有人用本书讲过只有一天的媒体计算专题研讨会。
   第6~8章基本上重复了第3~5章中的计算机科学概念,但上下文是声音而不是图像。我们发现这种重复很有用—有些学生似乎在使用一种媒体时比使用另一种能更好地关联迭代和条件式的概念。此外,它让我们有机会指出同一种算法可在不同的媒体中拥有类似的效果(比如,缩放图片与调整音高用的是同一种算法)。但如果要节省时间,当然可以跳过这部分。
   第12章在编程和计算方面没有介绍新的概念。电影的处理尽管能激发学生的兴趣,但为了节省时间也可以跳过。
   关于最后一部分,我们建议有些章节至少要讲一讲,从而引导学生以更抽象的方式思考计算和编程,但显然没必要涵盖所有章节。
Python和Jython
  本书使用的编程语言是Python。人们把Python描述为“可执行的伪代码”(executable pseudo-code)。我们发现计算机科学专业和非专业人士都可以学习Python。由于Python实际用于交互任务(比如网站开发),因此它很适合用做“计算机导论”课程的语言。例如,Python网站(http://www.python.org)上的招聘广告显示:像谷歌和Industrial Light & Magic这样的公司都在招Python程序员。
  具体来讲,本书使用的Python“方言”是Jython(http://www.jython.org)。Jython就是Python。Python(通常用C实现)和Jython(用Java实现)的区别类似于任何两种语言实现之间的区别(比如Microsoft和GNU C++的实现)—基础语言是完全一致的,区别仅在于某些库和细节方面,大多数学生都注意不到。
格式说明
  Python示例代码的字体如:x = x + 1。更长的示例版式如下:
  def helloWorld():
   print "Hello, world!"
  当显示用户输入对Python响应的内容时,字体风格类似,但用户的输入将出现在Python提示符(>>>)之后:
  >>> print 3 + 4
  7
  在本书中,你还会发现几种特殊类型的图标。
计算机科学思想
  关键的计算机科学概念以此种图标显示。
  常见bug
  可能导致程序失败的常见问题以此种图标显示。
  调试技巧
  事前预防bug潜入程序的好办法以此种图标突出显示。
  实践技巧
  真正有帮助的最佳实践或技术以此种图标突出显示。
致谢
  衷心感谢:
   Jason Ergle、Claire Bailey、David Raines和Joshua Sklare,他们在非常短的时间内以惊人的高质量做出了第1版的JES。多年来,Adam Wilson、Larry Olson、Yu Cheung(Toby)Ho、Eric Mickley、Keith McDermott、Ellie Harmon、Timmy Douglas、Alex Rudnick、Brian O誑eill和William Fredrick(Buck)Scharfnorth III使JES成为今天这个简单实用且仍然易于理解的工具。
   Adam Wilson构建了对研究声音和图像以及处理视频来说非常有用的MediaTools。
   Andrea Forte、Mark Rickman、Matt Wallace、Alisa Bandlow、Derek Chambless、Larry Olson和David Rennie帮忙整理了教程讲义。Derek、Mark和Matt编写了许多示例程序。
   许多佐治亚理工学院人共同努力成就了这项工作。副教务长Bob McMath和计算机学院的教务副主任Jim Foley很早就投入了这项工作。Kurt Eiselt努力使这项工作变成现实,说服他人认真对待这项工作。“为初涉计算机科学的学生讲授媒体计算”,Janet Kolodner和Aaron Bobick对这种想法感到兴奋和鼓舞。Jeff Pierce审查了书中所用媒体函数的设计并给出了建议。关于如何精确地传达数字化素材的内容,Aaron Lanterman提出了很多建议。Joan Morton、Chrissy Hendricks、David White,以及GVU中心的所有工作人员都确保满足我们的需要并处理好全部细节,确保工作向着同一个目标前进。Amy Bruckman和Eugene Guzdial为Mark争取了时间,使最终版本得以完成。
   非常感谢Colin Potts和Monica Sweat,他们在佐治亚理工学院讲这门课,为我们提供了许多与课程有关的见解。
   Charles Fowler是佐治亚理工学院之外冒险在自己的学校(盖恩斯维尔学院)尝试这门课程的第一人,对此我们深表谢意。
   2003年春季,佐治亚理工学院开设的试讲课程对这门课程的改进非常重要。Andrea Forte、Rachel Fithian和Lauren Rich评估了这次试讲,这对我们理解哪些地方有效果、哪些地方没有效果具有不可低估的价值。第一批助教(Jim Gruen、Angela Liang、Larry Olson、Matt Wallace、Adam Wilson和Jose Zagal)为这一教学方法的设计做了大量工作。Blair MacIntyre、Colin Potts和Monica Sweat帮忙调整了教程讲义,从而方便其他人使用。Jocken Rick把CoWeb/Swiki变成了CS1315课上学生们最爱逛的好地方。
   许多学生指出了书中的错误并提出了改进建议。感谢Catherine Billiris、Jennifer Blake、Karin Bowman、Maryam Doroudi、Suzannah、Gill、Baillie Homire、Jonathan Laing、Mireille Murad、Michael Shaw、Summar Shoaib,特别是Jonathan Longhitano,他在文字编辑方面很有天赋。
   感谢之前媒体计算课上的学生Constantino Kombosch、Joseph Clark和Shannon Joiner同意我在示例中使用他们的课堂快照。
   与本书相关的研究工作得到了国家科学基金会(National Science Foundation)的赞助—赞助来自本科教育部门的CCLI项目,以及CISE教育革新项目。感谢你们的支持。
   感谢计算机课上的学生Anthony Thomas、Celines Rivera和Carolina Gomez允许我们使用他们的图片。
   最后,但最重要的,感谢我们的孩子Matthew、Katherine和Jenifer Guzdial,他们同意为了爸爸妈妈的媒体项目而被拍照、录音,他们对这门课程非常支持并为之欢欣鼓舞。

Mark Guzdial和Barbara Ericson
佐治亚理工学院

上架指导

计算机\程序设计

封底文字

计算机程序设计课程往往是枯燥乏味的,而本书根据教育理论,开发了一种新的教学方法,介绍如何通过多媒体编程来学习计算机程序设计,将趣味性和实用性融于枯燥的编程课程的教学当中。本书方法独特新颖,实例通俗易懂,可快速入门,并深入掌握编程技能,是一本理论联系实际的程序设计教程。

本书使用的编程语言是Python,这是因为Python强大实用(比如网站开发)、易于入门,计算机科学专业和非专业人士都可以学习。本书以Python数字多媒体编程为主线,从图像、声音、文本和电影这些学生已经熟知的内容开始,讲解它们的处理方法,其中穿插介绍计算机科学与程序设计的基础知识。在讲解知识点的时候也独具匠心,先介绍容易理解的基本概念,如赋值、顺序操作、迭代、条件式、函数定义等,逐步涉及抽象内容,如算法复杂度、程序效率、计算机组成、层次式分解、递归、面向对象等。本书还提供了大量例题和习题,方便教学。

作者简介

(美)Mark Guzdial,Barbara Ericson 著:Mark Guzdial是佐治亚理工学院计算机学院交互式计算专业的教授。他是ACM国际计算机教育研究系列研讨会的创立者之一,ACM教育委员会副主席,“Journal of the Learning Sciences”和“Communications of the ACM”编委会委员。Guzdial博士主要关注计算机教育方面的研究。他的第一本著作论述Squeak语言及其在教育中的应用。他是Swiki(Squeak Wiki)的早期开发者,Swiki是第一个专门用于学校的wiki。Mark出版了多本关于利用多媒体编程环境学习计算机编程的著作,影响了世界各地的计算机本科生教学。 Barbara Ericson是佐治亚理工学院计算机学院“计算机普及”课程的主管和研究人员。她从2004年开始就致力于改善计算机基础教育,现在是计算机科学教师协会的师范教育代表,美国女性信息技术中心K-12联盟的合作主席,计算机科学AP考试开发委员会成员。她的研究兴趣涉及计算机图形学、人工智能和面向对象编程等多个领域。

译者简介

王江平 译:暂无简介

译者序

这是一本什么书
  这是一本什么样的书呢?根据主要内容,我们不妨先给出3种可能的诠释:
  1)一本讲Python编程的书,以多媒体处理为例增强趣味性;
  2)一本讲多媒体编程的书,选用Python作为示例语言;
  3)一本别出心裁的“计算机导论”教程,以Python多媒体编程为线索讲解各种有趣的计算机科学知识,把读者带进充满乐趣的计算机科学殿堂。
  每个答案都不算错,但最恰当的当数第3个。没错,本书以Python数字多媒体编程为主线,依次讲解了图像、声音、文本和电影的处理,其中穿插介绍了大量的计算机科学基础知识。方法独到,示例通俗,条理清晰,将趣味性和实用性融于讲解之中,所有这些都会给阅读本书带来美好的体验。
  除了主要内容(数字多媒体处理)之外,本书的最后一部分还介绍了更通用的计算机科学与编程知识:计算机性能、函数式编程和多媒体编程。
本书读者对象
  显然,本书适合用做计算机专业导论课或者非计算机专业编程课程的教材。
  想了解或温习一下计算机数字多媒体处理知识的专业程序员也可以翻翻这本书。
  想学习如何用程序处理多媒体的非专业人士也可以读一读。新东方的李笑来老师因为“能够编写一些批处理脚本”,才有了《TOFEL核心词汇21天突破》。想学习编程的朋友们,可别忘了Python是非常强大、非常流行,同时又易懂易学的脚本语言。
  最后,所有对Python语言感兴趣,想通过一些简单实用的例子来学习这门编程语言的朋友,都可以看看这本书。
我与华章
  自从跟聂雪军、王昕等朋友合作翻译《代码之美》起,这是我与机械工业出版社华章分社的第5次合作了,非常感谢他们五六年来对我一贯的信任,特别是陈冀康先生。
  华章一直在大量引进国外的优秀计算机图书,我本人也是受益者,最近正在精读他们引进的《Computer Systems: A Programmer誷 Perspective》第2版。
致谢
  首先感谢我的家人在这4个多月的时间里给予的支持。
  本书的审校工作再次邀请了校对奇人张伸(新浪微博:@loveisbug)帮忙,此人眼尖、心细,再加上因博览群书而培养起来的文字感,每次都能帮上大忙。上次审校《Java语言精粹》一书,出版后发现的唯一一处错别字出现在未经他过目的“译者序”中。这次他又帮忙通读了全书译稿(包括译者序),十分感谢他的辛勤和一丝不苟。
  遇到较难翻译的内容时,译者经常上译言网(www.yeeyan.org)论坛求助。感谢耐心解答过问题的以下网友:nc、桥头堡、dingdingdang、qmiao和sparklark。
  在我的gtalk上,高远(新浪微博:@狼大人)是随叫随到的翻译顾问。谢谢他的不厌其烦和及时响应。
  齐艳昀也为本书的翻译出了一份力,同样表示感谢。
  最后不得不提及的是:初译本书时,有超过70%的内容是利用上下班时间在地铁上靠笔译完成的。感谢上海地铁2号线和7号线全体员工,有了你们,才有了平稳运行的地铁,让我可以平稳地做翻译。
联系译者
  尽管译者尽心尽力试图译好每一句话、每一个词,但限于时间和水平,错误疏漏在所难免,恳请读者朋友多多批评,不吝赐教。
  勘误信息可以提交到译者个人的豆瓣小站上:http://site.douban.com/120940,也可以直接发往译者的邮箱:steedhorse@163.net,还可以关注译者的新浪微博:@steedhorse,直接互动。

王江平
2011年8月  于上海浦东

图书目录

出版者的话
译者序
第2版前言
第1版前言
第一部分  导   论
第1章  计算机科学与媒体计算导论 2
1.1  计算机科学是关于什么的 2
1.2  编程语言 4
1.3  计算机理解什么 5
1.4  媒体计算:为什么要把媒体数字化 7
1.5  大众的计算机科学 8
1.5.1  计算机科学与交流有关 8
1.5.2  计算机科学与过程有关 9
习题 9
第2章  编程导论 11
2.1  编程与命名有关 11
2.2  Python编程 13
2.3  JES编程 13
2.4  JES媒体计算 15
2.4.1  显示图片 18
2.4.2  播放声音 19
2.4.3  数值命名 20
2.5  构建程序 22
习题 27
第3章  使用循环修改图片 30
3.1  图片的编码 30
3.2  处理图片 35
3.3  改变颜色值 40
3.3.1  在图片上运用循环 40
3.3.2  增/减红(绿、蓝) 42
3.3.3  测试程序:它真的能运行吗 45
3.3.4  一次修改一种颜色 46
3.4  制作日落效果 47
3.5  亮化和暗化 51
3.6  制作底片 52
3.7  转换到灰度 53
习题 55
第4章  修改区域中的像素 58
4.1  复制像素 58
4.2  图片镜像 60
4.3  复制和转换图片 66
4.3.1  复制 66
4.3.2  制作拼贴图 72
4.3.3  通用复制 74
4.3.4  旋转 75
4.3.5  缩放 77
习题 81
第5章  高级图片技术 84
5.1  颜色替换:消除红眼、深褐色调和
色调分离 84
5.1.1  消除红眼 86
5.1.2  深褐色调和色调分离:使用条件式
选择颜色 88
5.2  合并像素:图片模糊化 92
5.3  比较像素:边缘检测 93
5.4  图片融合 94
5.5  背景消减 96
5.6  色键 98
5.7  在图像上绘图 101
5.7.1  使用绘图命令 102
5.7.2  向量和位图表示 104
5.8  指定绘图过程的程序 105
习题 107
第二部分  声   音
第6章  使用循环修改声音 110
6.1  声音是如何编码的 110
6.1.1  声音的物理学 110
6.1.2  探索声音的样子 113
6.1.3  声音编码 115
6.1.4  二进制数和二进制补码 116
6.1.5  存储数字化的声音 117
6.2  处理声音 118
6.2.1  打开声音并处理样本数据 118
6.2.2  使用JES媒体工具 121
6.2.3  循环 123
6.3  改变音量 123
6.3.1  增大音量 123
6.3.2  真的行吗 124
6.3.3  减小音量 127
6.3.4  理解声音函数 128
6.4  声音规格化 128
习题 131
第7章  修改一段样本区域 133
7.1  用不同方法处理不同声音片段 133
7.2  剪接声音 135
7.3  通用剪辑和复制 140
7.4  声音倒置 142
7.5  镜像 143
习题 144
第8章  通过合并片段制作声音 146
8.1  用加法组合声音 146
8.2  混合声音 147
8.3  制造回声 148
8.3.1  制造多重回声 149
8.3.2  制作和弦 149
8.4  采样键盘工作原理 150
8.5  加法合成 153
8.5.1  制作正弦波 153
8.5.2  把正弦波叠加起来 155
8.5.3  检查结果 156
8.5.4  方波 157
8.5.5  三角波 158
8.6  现代音乐合成 160
8.6.1  MP3 161
8.6.2  MIDI 161
习题 162
第9章  构建更大的程序 164
9.1 自顶向下设计程序 164
9.1.1  自顶向下设计示例 165
9.1.2  设计顶层函数 166
9.1.3  编写子函数 168
9.2  自底向上设计程序 171
9.3  测试程序 172
9.4  调试技巧 174
9.4.1  找出担心的语句 174
9.4.2  查看变量 175
9.4.3  调试冒险游戏 176
9.5  算法和设计 179
9.6  在JES之外运行程序 180
习题 181
第三部分  文本、文件、网络、
数据库和单媒体
第10章  创建和修改文本 186
10.1  文本作为单媒体 186
10.2  字符串:构造和处理字符串 187
10.3  处理部分字符串 189
10.3.1  字符串方法:对象和点号语法
简介 190
10.3.2  列表:强大的结构化文本 191
10.3.3  字符串没有字体 194
10.4  文件:存放字符串和其他数据的
地方 194
10.4.1  打开文件和操作文件 195
10.4.2  制作套用信函 197
10.4.3  编写程序 197
10.5  Python标准库 201
10.5.1  再谈导入和私有模块 202
10.5.2  另一个有趣模块:Random 202
10.5.3  Python标准库的例子 204
习题 205
第11章  高级文本技术:Web和信息 208
11.1  网络:从Web获取文本 208
11.2  通过文本转换不同媒体 211
11.3  在图片中隐藏信息 216
习题 219
第12章  产生Web文本 221
12.1  HTML:Web的表示方法 221
12.2  编写程序产生HTML 225
12.3  数据库:存放文本的地方 229
12.3.1  关系型数据库 231
12.3.2  基于散列表的关系型数据库示例 231
12.3.3  使用SQL 234
12.3.4  使用数据库构建Web页面 236
习题 237
第四部分 电   影
第13章  制作和修改电影 240
13.1  产生动画 241
13.2  使用视频源 247
13.3  自底向上制作视频效果 250
习题 254
第五部分  计算机科学议题
第14章  速度 258
14.1  关注计算机科学 258
14.2  什么使程序速度更快 258
14.2.1  什么是计算机真正理解的 258
14.2.2  编译器和解释器 259
14.2.3  什么限制了计算机的速度 263
14.2.4  让查找更快 265
14.2.5  永不终止和无法编写出的算法 266
14.2.6  为什么Photoshop比JES更快 268
14.3  什么使计算机速度更快 268
14.3.1  时钟频率和实际的计算 268
14.3.2  存储:什么使计算机速度慢 269
14.3.3  显示 270
习题 270
第15章  函数式编程 272
15.1  使用函数简化编程 272
15.2  使用Map和Reduce进行函数式编程 275
15.3  针对媒体的函数式编程 277
15.4  递归:一种强大的思想 279
15.4.1  递归式目录遍历 284
15.4.2  递归式媒体函数 286
习题 287
第16章  面向对象编程 289
16.1  对象的历史 289
16.2  使用“小海龟” 290
16.2.1  类和对象 290
16.2.2  创建对象 290
16.2.3  向对象发送消息 291
16.2.4  对象控制自己的状态 292
16.2.5  小海龟的其他函数 293
16.3  教小海龟新的技艺 295
16.4  面向对象的幻灯片 297
16.4.1  Joe the Box 300
16.4.2  面向对象的媒体 302
16.4.3  为什么使用对象 306
习题 307
附录A  Python快速参考 309
参考文献 313

教学资源推荐
作者: [美]梁勇(Y.Daniel Liang) 著
作者: Brian W.Kernighan,Rob Pike
作者: 王珊珊 臧洌 张志航 编著
作者: 谢满德 凌云 陈志贤 刘文强 张国萍 编著
参考读物推荐
作者: Andre Lewis Michael Purvis;Jeffrey Sambells Cameron Turner
作者: (芬)Lasse Koskela 著
作者: Bruce A.Tate
作者: Luke Welling; Laura Thomson