书名:Python编程快速上手实战手册 让烦琐工作自动化
ISBN:978-7-115-69616-8
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [美]阿尔·斯维加特(Al Sweigart)
译 袁国忠
责任编辑 胡俊英
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
这是一本强调动手实践的Python编程实战手册,与经典教程《Python编程快速上手——让烦琐工作自动化(第3版)》[以下简称《Python编程快速上手(第3版)》]相辅相成。
本书共24章,内容遵循清晰的实践路径展开。从Python基础语法、流程控制与函数调试入手,逐步深入到列表、字典、文件操作及正则表达式等数据处理核心技能,进而拓展至Web抓取、电子表格与数据库操作、图像处理、GUI自动化,以及语音识别等高级应用领域,全面覆盖Python在自动化办公与智能开发中的关键场景。全书通过大量习题与实践项目,系统培养读者从理解语法到解决实际问题的综合编程能力。此外,本书还提供全书所有习题与实践项目的参考答案,以便读者检验其对知识和技能的掌握情况。
本书不仅有助于读者巩固所学知识和技能,及时查漏补缺,而且有助于塑造其独立解决实际问题的能力,为日后独立开发项目或深入学习计算机编程奠定坚实基础。
阿尔·斯维加特(Al Sweigart),软件开发人员、艺术家、Python软件基金会会士(Fellow);著有多部适合初学者阅读的编程著作,其中包括Invent Your Own Computer Games with Python、The Big Book of Small Python Projects和Beyond the Basic Stuff with Python(均由No Starch 出版社出版);曾在多个PyCon大会上担任演讲嘉宾。
丹尼尔·津加罗(Daniel Zingaro)博士任教于多伦多大学计算机科学系。因以下成就蜚声海内外:开创独特的互动式教学方法、对生成式 AI 辅助教学的前沿研究、编写以学习者为中心的教材(被全球各地数千名学生所采用)。著有《算法思维:竞赛真题精选精讲(第2版)》(人民邮电出版社,2026)和 《Python编程做中学》(人民邮电出版社,2022),并与人合著了《AI辅助编程Python实战:基于GitHub Copilot和ChatGPT》(人民邮电出版社,2025)。
本书封面上只有我的名字,这很容易让人误解。
如果没有众多人士的鼎力相助,本书绝无可能付梓。在此衷心感谢以下人员提供的宝贵支持:出版人Bill Pollock,编辑Jill Franklin、Sabrina Plomitallo-González、Allison Felus、Frances Saux和Audrey Doyle,以及No Starch出版社的其他工作人员。特别感谢丹尼尔·津加罗(Daniel Zingaro)博士提供的出色建议和支持。
万分感谢Python软件基金会每位成员的杰出贡献。感谢PyCon和DjangoCon大会组织者和志愿者的出色表现。感谢杰出的Python社区。
编程有时令人望而生畏。每当有人问我其学习方法或所选图书是否合适时,我总会强调——编程本质上是一项技能。与任何技能一样,只有通过持续的实践和挑战才能真正掌握。风平浪静锻炼不出好水手。
《Python编程快速上手》一书写于十多年前,重点介绍的是Python语法与第三方包的使用,经过历次升级,已更新至第3版。这本实战手册包含丰富的习题和实践项目,旨在帮助你检验自己能否真正运用编程自动化完成实际任务。
本书包含24章,与《Python编程快速上手(第3版)》各章一一对应。你可以选择两本书同步学习,也可先阅读《Python编程快速上手(第3版)》,再使用这本实战手册检验知识的掌握情况。
即便你尚未阅读《Python编程快速上手(第3版)》,本书同样具备实用价值,特别适合以下读者群体。
• 通过其他教材或课程学习Python,并且希望系统性查漏补缺的学习者。
• 希望自测对Python语法和生态的掌握情况的自学者。
• 需要为课程补充练习题或实践项目的教师。
• 已有其他语言基础,希望快速上手Python的程序员。
不管你属于哪个群体,都建议你反复完成这本实战手册中的习题,以确保真正理解底层概念。精通一门技术不仅需要积累知识,更要能够适时调用所学内容。达到精通程度的重要途径便是分散重复——围绕同一知识点多次练习,并重点攻克那些最具挑战性的问题(使用抽认卡辅助记忆是一种常见的分散重复学习方式)。因此,请不要将这本实战手册当作一次性读物,而应将其作为长期练习的工具,持续运用,反复实践。
本书的习题和实践项目按照《Python编程快速上手(第3版)》的章节结构编排,便于读者对应学习与检测。书末附上所有习题的参考答案和解析,并提供了实践项目的完整解决方案(可运行的程序)。需要说明的是,编程问题往往有多种正确实现方式,因此你的解决方案不必与本书提供的完全相同。如果你在解题过程中遇到困难,可参考书中的解决方案,再尝试独立完成。
以下是各章主要涉及的知识点。
• 第1章:表达式和语句的基本形式是怎样的?何为变量?变量可存储哪些类型的数据?
• 第2章:条件和表达式如何得到布尔值结果?缩进如何定义代码块?if、elif和else语句有何区别?
• 第3章:for循环和while循环有何不同?range()函数能接收哪些参数?break和continue语句有何作用?
• 第4章:如何创建可接收参数并返回值的自定义函数?变量在全局作用域和局部作用域内是如何工作的?
• 第5章:如何使用日志功能和调试器来缩短程序修复时间?何为断点?有哪些逐步执行程序的方式?
• 第6章:列表的作用是什么?如何添加、访问、修改和删除列表元素?嵌套列表是如何工作的?
• 第7章:相比于列表中的数据,字典中的键-值对有何不同?如何使用字典和列表对现实事物建模?
• 第8章:文本在计算机中如何表示?Python提供了哪些处理文本的方法?
• 第9章:如何使用正则表达式指定文本模式?
• 第10章:计算机如何组织文件系统中的文件和文件夹?pathlib模块有何作用?如何在Python程序中读写文本文件?
• 第11章:如何在Python程序中列出、移动、重命名、复制和删除计算机中的文件?
• 第12章:确保程序正确无误后,如何在不打开代码编辑器的情况下直接运行它?如何使其能够在未安装Python的计算机上运行?
• 第13章:如何在Python程序中下载文件、控制浏览器,以及从网络获取信息?
• 第14章:在没有安装Excel的情况下,如何创建、访问和编辑Excel电子表格文件?如何在Excel电子表格文件中创建图表和公式?
• 第15章:如何创建、访问和编辑在线的Google Sheets电子表格?如何设置Python程序,以安全地使用Google账户?
• 第16章:何为数据库和表?哪种语言可用于访问并更新数据库和表中的数据?相比于其他数据库,SQLite有哪些优点?
• 第17章:如何读取和编辑PDF文档和Word文件的内容?
• 第18章:常见的数据序列化格式有哪些?这些格式各有什么用途?CSV、JSON和XML之间有何不同?它们的历史如何决定了它们的用途?
• 第19章:在Python程序中,如何表示日期、时间戳和日历?如何在Python程序中启动其他程序?
• 第20章:如何在Python程序中将通知发送到指定的电子邮件地址和手机号码?
• 第21章:计算机如何将图像和颜色表示为数据?程序如何创建和修改图像,如何创建各种图表?
• 第22章:程序如何识别图像和文档扫描件中的文本?如何修正提取过程中发生的错误?
• 第23章:如何使用Python模拟鼠标单击和按键操作,从而与其他软件交互?如何在程序中检测屏幕上显示的内容?
• 第24章:如何让程序通过计算机上的扬声器播放声音?如何让程序识别音频文件中的单词?常见的视频字幕格式有哪些?
这本实战手册为Python教学提供了实用资源。其中,第1~11章的习题涵盖了Python语言和标准库的核心内容,可作为Python课程的补充练习材料。
书末附有全部习题答案。想把这些习题布置成作业的教师可能会有所顾虑,毕竟学生持有这本实战手册即可查看参考答案。事实上,对于这些基础习题,学生可以通过网络或AI工具轻松获得答案。因此,教师可以在课堂上使用这些习题,或根据教学需要适当调整题目内容与形式。
这些习题多以问答题形式出现,旨在让学生主动探索答案,激励他们在Python交互式环境中动手验证。例如,面对“表达式round(4.9)的结果为整数5还是浮点数5.0”这类问题时,学生可通过实际操作获得答案。若在教学环节中学生不便使用计算机,教师可降低习题的难度,例如为每个习题提供多个可供选择的答案,或者为一组习题提供一系列可供选择的答案。
软件开发是一个广阔且高度细分的领域,没有人能够对该领域的各个方面都了如指掌。因此程序员们开发出各种软件工具辅助其编程就不足为奇了。搜索引擎和Python交互式环境也是获取信息的绝佳途径。大家应该明白的是,上网查找信息绝非“作弊”,毕竟专业软件工程师每天都在多次重复这一过程!
高效检索信息是一项重要的技能,这要求你精准地分析问题,明确自己到底想要知道什么。相较于将遇到的问题发布到论坛上并等待数小时、几天乃至几周才获得回复,在网上查找现成的答案无疑是更为快捷的方式。
确实需要发帖提问时,请务必表达得具体而明确。我在线教授编程时,常常收到类似于“我的程序不能正确运行”这样的评论,且除此之外没有任何其他信息。这样的评论甚至连问题都算不上,面对此情此景,教师难以施以援手。要提出一个经过深思熟虑的问题,一种有效的方式是借助橡皮鸭调试法:在办公桌上摆个橡皮鸭或其他没有生命的物品,并向它完整阐述你面临的问题,大声说出来或者在一个空文档中将问题写下来,关键是通过组织语言清晰地呈现你的思路。接下来,请尝试对着橡皮鸭阐述如下问题的答案:
• 我想让程序实现什么功能?
• 程序看起来做的是什么?
• 程序能否部分运行?如果能,问题似乎出在哪里?
• 程序是否报错?如果报错,具体的错误消息是什么?
• 为了进一步弄清楚原因,还可以补充哪些其他的问题?
编程并非被动或神奇的活动:每个问题的背后都存在真实而具体的答案,但必须由你亲自去寻找。每当你无法理解程序的所作所为时,请记住——严格地说,程序之所以有这样的运行结果,是因为你编写的代码让它这样做。
解决问题的另一种方式是,在交互式环境中运行相关的代码。通过在提示符>>>后输入Python指令,可执行该指令并立即查看结果。例如,如果调用int()函数并传入9.9,这个函数将返回9还是10呢?如果调用这个函数时传入了一个空字符串,将出现什么样的错误消息呢?如果向int()函数传递了一个包含整数的变量,它将引发异常还是正常运行?要回答这些问题,根本不需要查看Python文档,只需在交互式环境中输入相应的代码,就能马上揭晓答案:
>>> int(9.9)
9
>>> int(′′)
Traceback (most recent call last):
File ″<stdin>″, line 1, in <module>
ValueError: invalid literal for int() with base 10: ′′
>>> some_variable = 42
>>> int(some_variable)
42本书中的许多习题,都可通过这种方式找到答案。如果想理解一段代码的运行逻辑,最佳的方式就是尝试去执行它。
另外,虽然也有类似于“ValueError: invalid literal for int() with base 10: ′′”这样表述不够清晰的错误消息,但你依然可以将其复制并粘贴到搜索引擎中。这样往往能找到曾遇到同样错误的开发者,从而了解他们是如何解决这种问题的。
在为初学者提供建议时,经验丰富的软件开发人员常会给出两条看似合理,实则可能将新手引入歧途的建议。
一是初学者应通过给开源项目作贡献来积累经验。实际上,开源项目通常是规模庞大而复杂的软件,为其作出有意义的贡献往往超出了初学者的能力范围,即便只是添加“小功能”或修复“简单的bug”,也需要对项目的整体架构有充分理解。这些项目通常由不拿报酬的志愿者维护,他们可能并没有时间和精力指导新人熟悉代码库。
二是建议初学者自行开发项目。这确实是个好主意,但若缺乏具体指导,初学者往往难以判断哪些项目切实可行。他们可能并不清楚自己的能力范围。比如,开发一套完整的系统或AI助手听起来固然令人兴奋,但实际上过于复杂,即便对于技能娴熟的开发者而言,也往往不是单打独斗就可以完成的。
初学者需要的是具体、可操作的指南,而非模糊不清的建议。以下是我对如何选择和开展第一个项目的一些建议。
• 选择感兴趣的主题:将日常重复性任务自动化、设计一款喜爱的小游戏、重新实现某个你喜欢使用的应用程序。
• 严格控制项目规模:不要试图去创建功能完备的商业应用程序,其实际开发所需的时间通常远远超出预期。对于想要创建的程序,先构思最简单可行的版本,并专注于实现它。
• “少食多餐”:成功编写多个小程序带来的成就感远胜过因一个庞大项目半途而废带来的挫败感。
• 列出程序无须提供的功能:列出那些虽然“很酷”但当前不应加入的功能,避免偏离最初的目标。
• 坚持使用自己熟悉的Python标准库、第三方包和平台:如果项目需要你学习太多新内容,建议先搁置,应另选更合适的项目。
在我的其他Python著作中,有多个满足上述要求的入门项目。这些项目都有结构简单、体量适中、功能完整的基本程序,无须复杂的配置工作,也不依赖繁重的第三方包。
• The Big Book of Small Python Projects(No Starch出版社,2021年):总共81个项目,涉及游戏、数字艺术模拟等领域。
• Invent Your Own Computer Games with Python, 4th edition(No Starch出版社,2016年):针对Python新手编写的图书,引导读者使用二维图形循序渐进地创建游戏。
• Cracking Codes with Python(No Starch出版社,2018年):引导读者创建可在笔记本计算机上运行的经典加密和破解程序,如凯撒加密法、维吉尼亚加密法等。
读者可以从异步社区下载实践项目的解决方案程序,并从这些项目中得到启发,进而学会自主设计和开发更加成熟完善的项目。
这些简单的程序将帮助你明确哪些任务在初学者的能力范围之内。通过完成本书的习题和实践项目,你将掌握丰富的Python知识并学会动手编写代码,为接下来的编程之旅打下坚实的基础。
在本章中,你将通过编写表达式、尝试使用交互式环境、创建第一个程序来探索基本的编程元素。你还将使用值和数据等概念,还有诸如print()和input()等函数。
| 学习目标: • 尝试在交互式环境中执行指令。 • 识别代码中的表达式、值、运算符和数据类型。 • 掌握字符串的编写方式,学会拼接和复制字符串。 • 理解变量的使用方法,学会在表达式中使用变量存储数值。 • 能够熟练处理程序中的错误并准确解读错误消息。 • 能够编写和运行程序,并分析程序的各个组成部分。 • 学会调用常用函数,如print()、input()、len()、abs()、round()等。 • 探索数据类型,并能运用type()、int()、float()、str()等函数进行数据类型转换。 |
1.1 习题本章的习题主要围绕技术术语和基本概念设置,旨在帮助读者巩固所学内容,其中大部分问题都可通过在交互式环境中运行代码来找到答案。这并非作弊,事实上,许多专业软件开发人员都采用这种方式来验证代码的运行效果是否符合预期。交互式环境为代码测试提供了一种直接而高效的途径。
通过交互式环境,你可以逐条输入运行指令。在提示符>>>后,既可输入由值和运算符组成的表达式,还可以输入其他Python代码。运行代码后,交互式环境会立即显示结果。
请将括号中的数学运算符(+、-、*、/、**、//、%)与下列名称正确匹配起来。
|
1.除法运算符。 2.乘法运算符。 3.减法运算符。 4.求模运算符。 5.加法运算符。 6.乘方运算符。 7.“向下取整”除法运算符。 |
表达式是编程语言中最基本的指令类型,由值(如2)和运算符(如+)组成,其结果为单个值。
|
8.对于下面的两个表达式,Python的解读结果是否存在差别?
9.表达式 10.26除以8的商为3,且余数为2,请问表达式 11.编写一个将数字1~10相加的表达式(提示:这个表达式的开头部分为1 + 2 + 3 +)。 |
下列表达式都包含两个运算符,请根据Python的运算顺序规则,判断下列表达式中哪个运算符会被优先执行?
|
12. 13. 14. 15. 16. |
下列哪些表达式会引发错误(可在交互式环境中输入这些表达式来验证答案)?
|
17. 18. 19. 20. 21. 22. |
数据类型是值的特定分类,每个值都属于且仅属于一种数据类型。例如,整型(int)包括所有整数值;包含小数点的数字(如3.14)属于浮点型;而文本值则被称为字符串。
请指出题目23~29中各个值的数据类型——是整型、浮点型还是字符串。你可以在交互式环境中调用type()函数并传入相应值来验证答案,例如输入type(2)或type('hello')即可查看结果。
|
23. 24. 25. 26. 27. 28. 29. 30.值 |
作用于两个字符串值时,+为字符串拼接运算符,能将两个字符串合并为一个;作用于一个字符串值和一个整数值时,*为字符串复制运算符,能将原字符串复制指定的整数次。
下列各个表达式的结果分别是什么?
|
31. 32. 33. 34. 35. |
下列哪些表达式会引发错误?
|
36. 37. 38. 39. 40. 41. 42. |
变量可以看作计算机内存中用于存储单个值的“容器”。如果希望在程序后续部分复用某个表达式的计算结果,可将其存储到变量中。在为变量命名时,须遵循一定的命名规则,良好的变量名应能清晰反映其中包含的数据内容。
下列程序均在变量中存储值,请分析每个程序的输出结果。
|
43.
44. 45. 46. |
下列程序为何均会引发错误?
|
47. 48. 49. 50. |
下列哪些变量名是合法的?
|
51. 52. 53. 54. 55. 56. 57. |
交互式环境适合每次只运行一条Python指令,但要编写完整的Python程序,则需要将指令输入文件编辑器中。在《Python编程快速上手(第3版)》的第1章中,有一个“Hello, World”程序,其中使用了注释、print()和input()函数,以及值和运算符等概念。为进一步探索这些程序元素,请指出下列各项分别是变量、函数调用还是字符串。
|
58. 59. 60. 61. |
下列表达式是否会引发错误?如果不会,其结果是什么?
|
62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. |
请回答下列问题,加深对“Hello, world”程序中使用的技术的理解。
|
74.下面这个包含两行代码的程序为何会引发错误? number_of_cats = 4
print('I have ' + number_of_cats)
75. 76.请写出 77.请写出 78.请写出 |
二进制是指基数为2的计数方法。我们熟悉的以10为基数的十进制能够表示的数值,二进制都能够表示。十进制使用10个数字——0~9,但二进制只使用两个数字——0和1。计算机正是通过以二进制数表示文本、图像、音频等各种数据,来实现数据的存储和处理。请回答下列与数据表示相关的问题。
|
79.为何计算机使用二进制,而不使用我们更熟悉的十进制? 80.一个字节包含多少位? |
请使用以2为底的幂(如210)和十进制整数(如1024),指出下列单位分别表示多少字节。如需计算210的结果,可在交互式环境中输入表达式2 ** 10进行验证。
|
81. KB。 82. MB。 83.GB。 84.TB。 85.十进制数2的二进制表示为10,十进制数3的二进制如何表示? 86.十进制数7的二进制表示为111,十进制数8的二进制如何表示? |
1.2 实践项目请完成以下实践项目,以巩固所学内容。
编写一个程序,打印一个由大写字母O组成的矩形。例如,以下是一个宽度为8、高度为5的矩形示例:
OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO
以下程序是打印高度为5(即5行)的矩形,但宽度由用户输入的整数指定。例如,程序的输出可能是:
Enter the width for the rectangle: 15 OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO
以下是编写该程序的一些提示。
• 调用print()函数显示提示信息,要求用户输入矩形宽度值,再调用input()获取该值。
• 将input()函数返回的宽度值存储在一个变量中。
• input()函数返回一个字符串,但我们需要整数形式的宽度值,因此将该变量传递给int()函数,并将转换结果存储到另一个变量中。
• 使用字符串复制创建一个由字母O组成的字符串,其长度与用户输入的宽度相等(例如,如果变量width的值为8,表达式O * width的结果将为OOOOOOOO)。
• 重复调用print() 5次,每次输出上述生成的字符串,形成高度为5的矩形。
请将这个程序保存到文件rectPrint.py中。
编写一个程序,要求用户输入矩形的宽度和长度,并计算这个矩形的周长和面积。例如,该程序的输出结果可能如下所示:
Enter the width for the rectangle: 9 Enter the length for the rectangle: 5 Area of the rectangle: 45 Perimeter of the rectangle: 28
以下是编写该程序的一些提示。
• 调用函数print()显示提示信息,要求用户输入宽度值,再调用input()获取宽度值。以同样的方式获取长度值。
• 将input()返回的宽度和长度值存储在两个不同的变量中。
• input()函数返回一个字符串,但我们需要整数形式的宽度值,因此将相应的变量传递给int()函数进行数据类型转换,并将转换结果存储在另一个变量中。
• 周长为宽度和长度之和的两倍,面积为宽度和长度的乘积。
• 请将这个程序保存到文件perimeterAreaCalculator.py中。