前言 本书主要介绍Python程序设计的基础知识和应用程序设计,努力提高读者的编程水平,增强读者利用Python程序设计语言解决应用问题的能力。 本书特色 (1) 模块化教学。本书将Python程序设计分为程序设计基础(即基础部分)和应用程序设计(即应用部分)两大部分,基础部分遵循简单易学原则; 应用部分力求解决实际问题。应用部分由多个专业教学模块组成,便于不同专业采用不同模块组合的方式进行教学。 (2) 程序案例教学。本书从学生的角度出发,按照学生理解问题的思路和方式进行写作,力求内容通俗易懂。本书列举了600多道程序例题,其中很多典型应用程序案例可以作为课程设计的参考题目。作者期望通过“案例—模仿—改进—创新”的学习方法,使读者快速掌握Python语言的程序设计方法,帮助读者利用所学的Python程序语言知识,解决专业领域的具体问题。 (3) 丰富的教学资源。教材提供的教学资源有PPT课件、习题参考答案、程序案例源代码以及书中涉及的软件包、数据集、语料库等; 此外还提供了程序案例中的图片、音频、视频、文本、分类器、字体等资源。 主要内容 本书按模块化设计,分为两部分。 第1~6章为程序设计基础,篇幅占全书的40%左右。这部分内容比较浅显,避免了冗长繁杂的编程语法,对应用较少的程序语言功能(如迭代器、生成器、装饰器、断言、协程等)极少讨论。除第5章中的CSV和Excel文件读写案例外,第1~6章程序案例中的函数调用都使用标准函数,没有采用第三方软件包,这方便了课程实验教学。简单地说,第1部分内容主要面向文科和理工科各个专业的程序设计基础教学。 第7~14章为应用程序设计,篇幅占全书的60%左右。这部分内容根据不同专业的教学需求进行编写。对这部分内容,不同专业可以选择不同的章节模块。如文科专业可以选择其中的文本分析、可视化程序设计等模块进行教学; 工科专业可以选择可视化、数据库、大数据等模块进行教学; 人工智能、简单游戏、图像处理、科学计算等教学模块可以作为课程设计内容。简单地说,第2部分内容主要面向更深入的应用程序设计教学。 教学建议 教学中建议注意以下内容。 (1) 软件包选择。Python标准库函数丰富,另外还有大量非常成熟的第三方软件包,这对应用程序设计非常有利,但是也带来了选择难题。例如,可视化程序设计中,Python自带的Turtle模块可以绘制一些简单的几何图形,但是数据处理功能很弱; 第三方软件包Matplotlib的商业可视化图形设计功能很强大,但是动态数据图形处理能力很弱; 其他第三方可视化软件包往往是某一方面的功能强大,其他功能很弱,如WordCloud仅词云可视化功能强大,PyEcharts仅地图可视化功能强大,NetworkX仅社交网络可视化功能强大等。大数据、数据库、人工智能、图像处理等软件包都存在同样的问题。本书虽然提供了多种方案解决这些问题,但是教学中并不需要介绍所有程序设计模块。建议每个章节重点介绍2个左右,其他模块让学生在课程实验或课程设计中完成更好。 (2) 教学要点。第1部分的程序设计基础内容比较简单,不存在太多学习困难。第2部分的应用程序设计中,由于涉及的软件模块较多,部分软件包会涉及一些专业背景知识。因此,建议将教学重点放在核心函数的应用上。尤其是软件包中的核心函数,教学中可以重点介绍核心函数的功能、核心函数的主要参数及其含义与设置等。在今后的专业课程教学中,会讲解到这些函数采用的算法思想。本书的重点是程序设计,建议在教学中重点讲解核心函数的使用方法,淡化函数的算法原理和专业背景知识。通俗地说,就是“不要问汽车如何造,而要问汽车如何开”。 (3) 问题处理。程序设计往往会遇到很多问题。Python程序调试中遇到最多的问题是文件路径、程序中的逗号、中文乱码和软件包版本不匹配。本书在1.2.6节讨论了路径问题; 在4.4.2节讨论了逗号等问题; 在8.2.3节讨论了乱码问题; 软件包版本不匹配问题分散在各章节进行讨论。在此特意提醒读者注意这些问题。对于大部分可能遇到的问题,本书都提供了解决的方法和案例。但是,任何图书都无法解决程序设计中的所有问题。因此,应当鼓励学生利用网络资源和动手实验来解决问题。 本书说明 (1) 为了使读者快速理解书中的程序案例,书中的程序都进行了详细注释,这些注释大部分是说明程序的语法规则和语句功能。在软件工程实际中,程序注释不需要说明程序语法规则,而是告诉别人程序语句的意图和想法,增强程序的易读性。 (2) 程序中的空行会使程序结构看起来更加清晰明了,在程序代码中适当增加空行是一个良好的编程习惯。遗憾的是,受篇幅的限制,本书的程序代码压缩了所有空行,这使一些程序看起来有些局促拥挤,这实在是无奈之举。 (3) 为了解决程序案例实用性与个人隐私的矛盾,书中的人物姓名一部分来自文学名著,另一部分由Python程序自动生成,如有雷同,纯属巧合。 (4) Python是一种多范式编程语言,它可以采用命令式编程、过程式编程、事件驱动编程、面向对象编程、函数式编程等。多范式编程语言不可避免地会存在同一概念不同名称的情况发生。特别是“函数”的概念,过程式编程时称为“函数”,面向对象编程时称为“方法”; 函数式编程中,“函数”的概念又会有所不同。本书对“函数”与“方法”两个概念不做严格区分,大部分情况下统称为“函数”。其他名词如“属性”“特征”“标签”“数组”等,在不同的软件包中,它们的概念都会存在一些差异。 (5) 一种良好的编程方法是修改程序案例中某些语句或参数,看看会发生些什么。虽然不会总是得到一个期望的结果,但即使程序出错,也能增加读者的编程经验。 代码约定 (1) 书中程序案例均在以下环境中调试通过: 中文简体Windows 10(64位)、Python 3.7(32位)和Python 3.8(32位)、MySQL 8.0.17(32位)以及其他相应的第三方软件包或模块(32位); 程序调试环境为Python自带的IDLE。由于软件设计遵循向下兼容原则,在更高版本的软件环境(如64位环境)下,运行本书中的程序案例,会具有更好的性能。 (2) 程序案例中使用的软件包较多,为了避免引起混淆,在程序注释中,凡是有“导入第三方包”时,说明这个程序需要安装相应的第三方软件包; 程序注释中,有“导入标准模块”时,说明模块已由Python安装,不需要再另外安装软件包; 程序注释中,有“导入自定义模块”时,说明这个模块由读者编写,并且存放在程序指定目录下。 (3) 本书的程序案例源代码和相应资源均存放在d:\test\01~d:\test\14子目录(如d:\test\01\E0123.py)中。读者调试部分程序案例(如需要载入数据集等文件)时,应当在硬盘建立相应目录,并且存放相应资源,或者修改程序案例中相关语句的路径。 (4) 部分程序案例的输出很长,为了压缩篇幅,书中省略了一些输出信息; 部分多行短数据的程序输出,也合并在一行中书写。为了区别程序语句与程序输出,案例中的程序行和命令行都标注了行号,而程序输出信息则不标注行号,以示区别。 (5) 一些函数语法格式中,方括号[,x]内的参数x表示可选参数,输入可选参数x时,[]不需要输入,但是其他符号(如逗号)需要输入。 读者反馈 非常欢迎读者对本书提出反馈意见,让我们了解您对本书的看法: 您喜欢哪些内容,不喜欢哪些内容,哪些内容讲解过于啰嗦拖沓,哪些内容还需要更加深入地讨论,等等。这些反馈对我们很重要,它有助于我们编写出对读者真正有帮助的教材。 尽管我们已经竭尽全力确保内容的准确性,但错误在所难免。如果您发现了书中的错误,无论是正文错误还是代码错误,希望您能将它反馈给我们,我们将不胜感激。这样不仅能够减少其他读者的困惑,还能帮助我们提高本书后续版本的质量。 如果您对书中某个问题存有疑问或不解,请联系我们,我们会尽力为您做出解答。您可以发送邮件至清华大学出版社客服邮箱cservice@tup.tsinghua.edu.cn。 致谢 本书由易建勋老师(长沙理工大学)编著,参加编写工作的还有周玮老师(四川工商学院)、唐良荣老师(长沙理工大学)、廖寿丰老师(湖南行政学院)、冯桥华老师(安顺职业技术学院)、李冬萍老师(昆明学院)等。因特网技术资料给作者提供了极大帮助,在这里对这些作者也表示真诚的感谢。 尽管我们非常认真、努力地编写本书,但水平有限,书中难免有疏漏之处,恳请各位同仁和读者给予批评指正。 本书提供了大量课程教学资源,如果教师在教学中需要这方面的资源,可登录清华大学出版社网站(http://www.tup.tsinghua.edu.cn/index.html)下载。 易建勋 2021年2月