Statistics
3
Views
0
Downloads
0
Donations
Python编程快速上手:让繁琐工作自动化 (Al Sweigart) (Z-Library)
技术Author:Al Sweigart
如今,人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程,我们能够解决现实生活中的很多任务。 本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的首部分介绍了基本Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。 本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用强大的编程语言和工具,并且会体会到Python编程的快乐。
Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
分类建议:计算机/程序设计/Python 人民邮电出版社网址:www.ptpress.com.cn 如果你曾经花几个小时重命名文件或更新数百个电子表格的单元格,就知道这样的任务有多繁琐了。但是,如果你 可以让计算机替你完成呢? 在本书中,你将学习利用 Python 编程,在几分钟内完成手工需要几小时的工作,而事先却无需具备编程经验。一 旦掌握了编程的基础知识,你就可以毫不费力地创建 Python 程序,完成高效的自动化工作,包括: ● 在一个文件或多个文件中搜索文本; ● 创建、更新、移动和重命名文件和文件夹; ● 搜索网页和下载的在线内容; ● 在任意大小的Excel电子表格中更新和格式化数据; ● 拆分、合并PDF文件,以及如何加水印和加密; ● 发送提醒邮件和文本通知; ● 填写在线表格。 本书一步一步地引导你完成每个程序,每章末尾的实践项目启发你来改进这些程序,并用你的新技能来让类似的任 务自动化。你不用再浪费时间去做任何可以自动化的工作。即使你从未写过一行代码,也可以让计算机来做繁重的工作, 本书告诉你如何做。 作者简介 Al Sweigart 是一名软件开发者,还教小孩和成人编程。他为初学者写了几本 Python 书籍,包括《Python 密码学 编程》、《Python 游戏编程快速上手》和《Python 和 Pygame 游戏开发指南》。 [美] Al Sweigart 著 王海鹏 译 资深Python程序员力作 带你快速掌握Python高效编程 美术编辑:董志桢 P y th o n 编 程 快 速 上 手 — 让 繁 琐 工 作 自 动 化 Python编程快速上手 —让繁琐工作自动化 FM42269Python编程快速上手——让繁琐工作自动化.indd 1-3 16-6-22 上午8:37
Page
2
人 民 邮 电 出 版 社 北 京 [美] Al Sweigart 著 王海鹏 译 Python编程快速上手 —让繁琐工作自动化 FM42269Python编程快速上手——让繁琐工作自动化.indd 4 16-6-21 上午8:10
Page
3
版权声明 Simplified Chinese-language edition copyright © 2016 by Posts and Telecom Press. Copyright © 2015 by Al Sweigart.Title of English-language original: Automate The Boring Stuff with Python ISBN-13: 978-1-59327-599-0, published by No Starch Press. All rights reserved. 本书中文简体字版由美国 No Starch 出版社授权人民邮电出版社出版。未经出版者书面许可,对本书 任何部分不得以任何方式复制或抄袭。 版权所有,侵权必究。 著 [美] Al Sweigart 译 王海鹏 责任编辑 陈冀康 责任印制 焦志炜 人民邮电出版社出版发行 北京市丰台区成寿寺路 11 号 邮编 100164 电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn 北京鑫正大印刷有限公司印刷 开本:8001000 1/16 印张:26.25 字数:590 千字 2016 年 7 月第 1 版 印数:1 – 3 000 册 2016 年 7 月北京第 1 次印刷 著作权合同登记号 图字:01-2015-2962 号 定价:69.00 元 读者服务热线:(010)81055410 印装质量热线:(010)81055316 反盗版热线:(010)81055315
Page
4
内容提要 如今,人们面临的大多数任务都可以通过编写计算机软件来完成。Python 是一 种解释型、面向对象、动态数据类型的高级程序设计语言。通过 Python 编程,我们 能够解决现实生活中的很多任务。 本书是一本面向实践的 Python 编程实用指南。本书的目的,不仅是介绍 Python 语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的 第一部分介绍了基本的 Python 编程概念,第二部分介绍了一些不同的任务,通过编 写 Python 程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序, 供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学 的知识。附录部分提供了所有习题的解答。 本书适合任何想要通过 Python 学习编程的读者,尤其适合缺乏编程基础的初学 者。通过阅读本书,读者将能利用最强大的编程语言和工具,并且将体会到 Python 编程的快乐。
Page
5
作者简介 Al Sweigart 是一名软件开发者和技术图书作者,居住在旧金山。Python 是他最 喜欢的编程语言,他开发了几个开源模块。他的其他著作都在他的网站 http://www. inventwithpython.com/上。 技术评审者简介 Ari Lacenski 是 Android 应用程序和 Python 软件开发者。她住在旧金山,她写了 一些关于 Android 编程的文章,放在 http://gradlewhy.ghost.io/上,并与 Women Who Code 合作提供指导。她还是一个民谣吉他手。
Page
6
致谢 没有很多人的帮助,我不可能写出这样一本书。我想感谢 Bill Pollock,我的编 辑 Laurel Chun、Leslie Shen、Greg Poulos 和 Jennifer Griffith-Delgado,以及 No Starch Press 的其他工作人员,感谢他们非常宝贵的帮助。感谢我的技术评审 Ari Lacenski, 她提供了极好的建议、编辑和支持。 非常感谢 Guido van Rossum,以及 Python 软件基金会的每个人,感谢他们了不 起的工作。Python 社区是我在业界看到的最佳社区。 最后,我要感谢我的家人和朋友,以及在 Shotwell 的伙伴,他们不介意我在写 这本书时忙碌的生活。干杯!
Page
7
译者序 会编程的人不一样 这是机器代替人的时代,也是人控制机器的时代。这是程序员的时代,也是非 程序员学编程的时代。这是算法的时代,也是编程语言的时代。翻译本书期间,深 度学习的人工智能程序 AlphaGo 以 4:1 击败了李世石九段。 每一个不会编程的年轻人都应该认真考虑:是不是应该开始学习编程? 学习一门新的语言,总是让人感到畏缩。这让我想起大学时英语老师教的学习 方法:听说领先,读写跟上。确实,学语言效果最好的方法就是“用”。本书就遵 循了这样的宗旨。本书是面对编程初学者的书,假定读者没有任何编程知识。在简 单介绍 Python 编程语言的基本知识后,就开始用一个接一个的例子,教我们如何用 Python 来完成一些日常工作,利用计算机这个强大的工具,节省工作时间,提高工 作效率,避免手工操作容易带来的错误。 真正的程序员,用编程来解决自己和别人的问题。俄罗斯有一个程序员编写了 一个程序,会给老婆发加班短信,会在宿醉不醒时给自己请假,会自动根据邮件恢 复客户的数据库,还可以一键远程煮咖啡。加拿大一名零编程基础的农场主,在学 习了一门编程课后,开发了一个程序,自动控制拖拉机,配合联合收割机收割谷物。 若是已经掌握了其他编程语言,想学习 Python,本书也是不错的参考。每一种 编程语言,都会提供一种独特的视角,让你对编程有新的认识。我非常喜欢 Python 没有花括号和分号,程序很“清爽”,符合奥卡姆剃刀原理:如无必要,勿增实体。 本书并没有深入介绍面向对象和函数式编程范式,如果想了解 Python 这方面的内 容,请参考其他书籍。 在本书的翻译过程,我自己也在项目中使用 Python 编程,从中得到许多启发。 因此,郑重向大家推荐。翻译中的错误,请不吝指出。 王海鹏 2016 年春于上海
Page
8
前 言 前 言 “你在 2 个小时里完成的事,我们 3 个人要做两天。”21 世纪早期,我的大学室友在一个电子产品零售商店工作。商店 偶尔会收到一份电子表格,其中包含竞争对手的数千种产品的 价格。由 3 个员工组成的团队,会将这个电子表格打印在一叠 厚厚的纸上,然后 3 个人分一下。针对每个产品价格,他们会 查看自己商店的价格,并记录竞争对手价格较低的所有产品。 这通常会花几天的时间。 “如果你有打印件的原始文件,我会写一个程序来做这件事。”我的室友告诉他 们,当时他看到他们坐在地板上,周围都是散落堆叠的纸张。 几个小时后,他写了一个简短的程序,从文件读取竞争对手的价格,在商店的 数据库中找到该产品,并记录竞争对手是否更便宜。他当时还是编程新手,花了许 多时间在一本编程书籍中查看文档。实际上程序只花了几秒钟运行。我的室友和他 的同事们那天享受了超长的午餐。 这就是计算机编程的威力。计算机就像瑞士军刀,可以用来完成数不清的任务。 许多人花上数小时点击鼠标和敲打键盘,执行重复的任务,却没有意识到,如果他 们给机器正确的指令,机器就能在几秒钟内完成他们的工作。 本书的读者对象 软件是我们今天使用的许多工具的核心:几乎每个人都使用社交网络来进行交 流,许多人的手机中都有连接因特网的计算机,大多数办公室工作都涉及操作计算 机来完成工作。因此,对编程人才的需求暴涨。无数的图书、交互式网络教程和开 发者新兵训练营,承诺将有雄心壮志的初学者变成软件工程师,获得 6 位数的薪水。
Page
9
前 言 本书不是针对这些人的。它是针对所有其他的人。 就它本身来说,这本书不会让你变成一个职业软件开发者,就像几节吉他课程 不会让你变成一名摇滚巨星。但如果你是办公室职员、管理者、学术研究者,或使 用计算机来工作或娱乐的任何人,你将学到编程的基本知识,这样就能将下面这样 一些简单的任务自动化: 移动并重命名几千个文件,将它们分类,放入文件夹; 填写在线表单,不需要打字; 在网站更新时,从网站下载文件或复制文本; 让计算机向客户发出短信通知; 更新或格式化 Excel 电子表格; 检查电子邮件并发出预先写好的回复。 对人来说,这些任务简单,但很花时间。它们通常很琐碎、很特殊,没有现成 的软件可以完成。有一点编程知识,就可以让计算机为你完成这些任务。 编码规范 本书没有设计成参考手册,它是初学者指南。编码风格有时候违反最佳实践(例 如,有些程序使用全局变量),但这是一种折中,让代码更简单,以便学习。本书 的目的是让人们编写用完即抛弃的代码,所以没有太多时间来关注风格和优雅。复 杂的编程概念(如面向对象编程、列表推导和生成器),在本书中也没有介绍,因 为它们增加了复杂性。编程老手可能会指出,本书中的代码可以修改得更有效率, 但本书主要考虑的是用最少的工作量得到能工作的程序。 什么是编程 在电视剧和电影中,常常看到程序员在闪光的屏幕上迅速地输入密码般的一串 1 和 0,但现代编程没有这么神秘。编程只是输入指令让计算机来执行。这些指令可 能运算一些数字,修改文本,在文件中查找信息,或通过因特网与其他计算机通信。 所有程序都使用基本指令作为构件块。下面是一些常用的指令,用自然语言的 形式来表示: “做这个,然后做那个。” “如果这个条件为真,执行这个动作,否则,执行那个动作。” “按照指定次数执行这个动作。” “一直做这个,直到条件为真。” 也可以组合这些构件块,实现更复杂的决定。例如,这里有一些编程指令,称 为源代码,是用 Python 编程语言编写的一个简单程序。从头开始,Python 软件执
Page
10
前 言 行每行代码(有些代码只有在特定条件为真时执行,否则 Python 会执行另外一些代 码),直到到达底部。 passwordFile = open('SecretPasswordFile.txt') secretPassword = passwordFile.read() print('Enter your password.') typedPassword = input() if typedPassword == secretPassword: print('Access granted') if typedPassword == '12345': print('That password is one that an idiot puts on their luggage.') else: print('Access denied') 你可能对编程一无所知,但读了上面的代码,也许就能够合理地猜测它做的事。 首先,打开了文件 SecretPasswordFile.txt,读取了其中的密码。然后,提示用户 (通过键盘)输入一个密码。比较这两个密码,如果它们一样,程序就在屏幕上 打印 Access granted。接下来,程序检查密码是否为 12345,提示说这可能并不 是最好的密码。如果密码不一样,程序就在屏幕上打印 Access denied。 什么是 Python Python 指的是 Python 编程语言(包括语法规则,用于编写被认为是有效的 Python 代码),以及 Python 解释器软件,它读取源代码(用 python 语言编写),并 执行其中的指令。Python 解释器可以从 http://python.org/免费下载,有针对 Linux、 OS X 和 Windows 的版本。 Python 的名字来自于英国超现实主义喜剧团体,而不是来自于蛇。Python 程序 员被亲切地称为 Pythonistas。Monty Python 和与蛇相关的引用常常出现在 Python 的 指南和文档中。 程序员不需要知道太多数学 我听到的关于学习编程的最常见的顾虑,就是人们认为这需要很多数学知识。 其实,大多数编程需要的数学知识不超过基本算数。实际上,善于编程与善于解决 数独问题没有太大差别。 要解决数独问题,数字 1 到 9 必须填入 9×9 的棋盘上每一行、每一列,以及每 个 3×3 的内部方块。通过推导和起始数字的逻辑,你会找到一个答案。例如,在图 1 的数独问题中,既然 5 出现在了左上角,它就不能出现在顶行、最左列,或左上角 3×3 方块中的其他位置。每次解决一行、一列或一个方块,将为剩下的部分提供更 多的数字线索。 仅仅因为数独使用了数字,并不意味着必须精通数学才能求出答案。编程也是 这样。就像解决数独问题一样,编程需要将一个问题分解为单个的、详细的步骤。 类似地,在调试程序时(即寻找和修复错误),你会耐心地观察程序在做什么,找
Page
11
前 言 出缺陷的原因。像所有技能一样,编程越多,你就掌握得越好。 图 1 一个新的数独问题(左边)及其答案(右边)。尽管使用了数字, 数独并不需要太多数学知识 编程是创造性活动 编程是一项创造性任务,有点类似于用乐高积木构建一个城堡。你从基本的想 法开始,希望城堡看起来像怎样,并盘点可用的积木。然后开始构建。在你完成构 建程序后,可以让代码变得更美观,就像对你的城堡那样。 编程与其他创造性活动的不同之处在于,在编程时,你需要的所有原材料都在 计算机中,你不需要购买额外的画布、颜料、胶片、纱线、乐高积木或电子器件。 在程序写好后,很容易将它在线共享给整个世界。尽管在编程时你会犯错,这项活 动仍然很有乐趣。 本书简介 本书的第一部分介绍了基本 Python 编程概念,第二部分介绍了一些不同的任 务,你可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供你学 习。下面简单介绍一下每章的内容。 第一部分:Python 编程基础 “第 1 章:Python 基础”介绍了表达式、Python 指令的最基本类型,以及如何 使用 Python 交互式环境来尝试运行代码。 “第 2 章:控制流”解释了如何让程序决定执行哪些指令,以便代码能够智能 地响应不同的情况。 “第 3 章:函数”介绍了如何定义自己的函数,以便将代码组织成可管理的部分。 “第 4 章:列表”介绍了列表数据类型,解释了如何组织数据。 “第 5 章:字典和结构化数据”介绍了字典数据类型,展示了更强大的数据组 织方法。
Page
12
前 言 “第 6 章:字符串操作”介绍了处理文本数据(在 Python 中称为字符串)。 第二部分:自动化任务 “第 7 章:模式匹配与正则表达式”介绍了 Python 如何用正则表达式处理字符 串,以及查找文本模式。 “第 8 章:读写文件”解释了程序如何读取文本文件的内容,并将信息保存到 硬盘的文件中。 “第 9 章:组织文件”展示了 Python 如何用比手工操作快得多的速度,复制、 移动、重命名和删除大量的文件,也解释了压缩和解压缩文件。 “第 10 章:调试”展示了如何使用 Python 的缺陷查找和缺陷修复工具。 “第 11 章:从 Web 抓取信息”展示了如何编程来自动下载网页,解析它们,获 取信息。这称为从 Web 抓取信息。 “第 12 章:处理 Excel 电子表格”介绍了编程处理 Excel 电子表格,这样你就 不必去阅读它们。如果你必须分析成百上千的文档,这是很有帮助的。 “第 13 章:处理 PDF 和 Word 文档”介绍了编程读取 Word 和 PDF 文档。 “第 14 章:处理CSV 文件和 JSON 数据”解释了如何编程操作CSV 和 JSON 文件。 “第 15 章:保持时间、计划任务和启动程序”解释了 Python 程序如何处理时间 和日期,如何安排计算机在特定时间执行任务。这一章也展示了 Python 程序如何启 动非 Python 程序。 “第 16 章:发送电子邮件和短信”解释了如何编程来发送电子邮件和短信。 “第 17 章:操作图像”解释了如何编程来操作 JPG 或 PNG 这样的图像。 “第 18 章:用 GUI 自动化控制键盘和鼠标”解释了如何编程控制鼠标和键盘, 自动化鼠标点击和击键。 下载和安装 Python 可以从 http://python.org/downloads/免费下载针对 Windows、OS X 和 Ubuntu 的 Python 版本。如果你从该网站的下载页面下载了最新的版本,本书中的所有程序应 该都能工作。 注意 请确保下载 Python 3 的版本(诸如 3.4.0)。本书中的程序将运行在 Python 3 上, 有一部分程序在 Python 2 上也许不能正常运行。 你需要在下载页面上找到针对 64 位或 32 位计算机以及特定操作系统的 Python 安装程序,所以先要弄清楚你需要哪个安装程序。如果你的计算机是 2007 年或以 后购买的,很有可能是 64 位的系统。否则,可能是 32 位的系统,但下面是确认
Page
13
前 言 的方法: 在 Windows 上。选择 StartControlPanelSystem。检查系统类型是 64 位或 32 位。 在 OS X 上,进入 Apple 菜单,选择 About This MacMoreInfoSystemReport Hardware,然后查看 Processor Name 字段。如果是 Intel Core Solo 或 Intel Core Duo, 机器是 32 位的。如果是其他(包括 Intel Core 2 Duo),机器是 64 位的。 在 Ubuntu Linux 上,打开终端窗口,运行命令 uname -m。结果是 i686 表示是 32 位,x86_64 表示是 64 位。 在 Windows 上,下载 Python 安装程序(文件扩展名是.msi),并双击它。按照 安装程序显示在屏幕上的指令来安装 Python,步骤如下。 1.选择 Install for All Users,然后点击 Next。 2.通过点击 Next 安装到 C:\Python34 文件夹。 3.再次点击 Next,跳过定制 Python 的部分。 在 OS X 上,下载适合你的 OS X 版本的.dmg 文件,并双击它。按照安装程序 显示在屏幕上的指令来安装 Python,步骤如下。 1.当 DMG 包在一个新窗口中打开时,双击 Python.mpkg 文件。你可能必须输 入管理员口令。 2.点击 Continue,跳过欢迎部分,并点击 Agree,接受许可证。 3.选择 HD Macintosh(或者你的硬盘的名字),并点击 Install。 如果使用的是 Ubuntu,可以从终端窗口安装 Python,步骤如下。 1.打开终端窗口。 2.输入 sudo apt-get install python3。 3.输入 sudo apt-get install idle3。 4.输入 sudo apt-get install python3-pip。 启动 IDLE Python 解释器是运行 Python 程序的软件,而交互式开发环境(IDLE)是输入 程序的地方,就像一个字处理软件。现在让我们启动 IDLE。 在 Windows7 或更新的版本上,点击屏幕左下角的开始图标,在搜索框中输入 IDLE,并选择 IDLE(Python GUI)。 Windows XP 上,点击开始按钮,然后选择 ProgramsPython 3.4IDLE(Python GUI)。 在 OS X 上,打开 Finder 窗口,点击 Applications,点击 Python 3.4,然后点击 IDLE 的图标。 在 Ubuntu 上,选择 ApplicationsAccessoriesTerminal,然后输入 idle3(也许你也
Page
14
前 言 可以点击屏幕顶部的Applications,选择 Programming,然后点击 IDLE 3)。 交互式环境 无论你使用什么操作系统,初次出现的 IDLE 窗口应该基本上是空的,除了类 似下面这样的文本: Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32Type "copyright", "credits" or "license()" for more information. >>> 这个窗口称为交互式环境。这是让你向计算机输入指令的程序,很像 OS X 上 的终端窗口,或 Windows 上的命令行提示符。Python 的交互式环境让你输入指令,供 Python 解释器软件来执行。计算机读入你输入的指令,并立即执行它们。 例如,在交互式环境的>>>提示符后输入以下指令: >>> print('Hello world!') 在输入该行并按下回车键后,交互式环境将显示以下内容作为响应: >>> print('Hello world!') Hello world! 如何寻求帮助 独自解决编程问题可能比你想的要容易。如果你不相信,就让我们故意产生一 个错误:在交互式环境中输入'42' + 3。现在你不需要知道这条指令是什么意思,但 结果看起来应该像这样: >>> '42' + 3 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> '42' + 3 TypeError: Can't convert 'int' object to str implicitly >>> 这里出现了错误信息,因为 Python 不理解你的指令。错误信息的 traceback 部 分显示了 Python 遇到困难的特定指令和行号。如果你不知道怎样处理特定的错误 信息,就在线查找那条错误信息。在你喜欢的搜索引擎上输入“TypeError: Can't convert 'int' object to str implicitly”(包括引号),你就会看到许多的链接,解释这条错误信 息的含义,以及什么原因导致这条错误,如图 2 所示。 你常常会发现,别人也遇到了同样的问题,而其他乐于助人的人已经回答了这 个问题。没有人知道编程的所有方面,所以所有软件开发者的工作,都是每天在寻 找技术问题的答案。
Page
15
前 言 图 2 错误信息的 Google 搜索结果可能非常有用 聪明地提出编程问题 如果不能在线查找到答案,请尝试在 Stack Overlow(http://stackoverflow.com/)或 “learnprogramming”subreddit(http://reddit.com/r/learnprogramming/)这样的论坛上提 问。但要记住,用聪明的方式提出编程问题,这有助于别人来帮助你。确保阅读这 些网站的 FAQ(常见问题),了解正确的提问方式。 在提出编程问题时,要记住以下几点。 说明你打算做什么,而不只是你做了什么。这让帮助你的人知道你是否走错了路。 明确指出发生错误的地方。它是在程序每次启动时发生,还是在你做了某些动 作之后? 将完整的错误信息和你的代码复制粘贴到 http://pastebin.com/或 http://gist. github.com/。 这些网站让你很容易在网上与他人共享大量的代码,而不会丢失任何文本格 式。然后你可以将贴出的代码的 URL 放在电子邮件或论坛帖子中。例如,这 里是我贴出的一些代码片段:http://pastebin.com/SzP2DbFx/和 https://gist.github. com/ asweigart/6912168/。 解释你为了解决这个问题已经尝试了哪些方法。这会告诉别人你已经做了一些 工作来弄清楚状况。
Page
16
前 言 列出你使用的 Python 版本(Python 2 解释器和 Python3 解释器之间有一些重要 的区别)。而且,要说明你使用的操作系统和版本。 如果错误在你更改了代码之后出现,准确说明你改了什么。 说明你是否在每次运行该程序时都能重现该错误,或者它只是在特定的操作执 行之后才出现。如果是这样,解释是哪些操作。 也要遵守良好的在线礼节。例如,不要全用大写提问,或者对试图帮助你的人 提出无理的要求。 小结 对于大多数人,他们的计算机只是设备,而不是工具。但通过学习如何编程, 你就能利用现代社会中最强大的工具,并且你会一直感到快乐。编程不是脑外科手 术,业余人士是完全可以尝试或犯错的。 我喜欢帮助人们探索 Python。我在自己的博客上编写编程指南(http:// inventwithpython.com/blog/),你可以发邮件向我提问(al@inventwithpython.com)。 本书将从零编程知识开始,但你的问题可能超出本书的范围。记住如何有效地 提问,知道如何寻找答案,这对你的编程之旅是无价的工具。 让我们开始吧!
Page
17
目 录 目 录 第一部分 Python 编程基础 第 1 章 Python 基础 ..................................... 3 1.1 在交互式环境中输入表达式 ....... 3 1.2 整型、浮点型和字符串数据类型 ... 6 1.3 字符串连接和复制 ........................ 6 1.4 在变量中保存值 ............................ 7 1.4.1 赋值语句 ............................... 7 1.4.2 变量名 ................................... 9 1.5 第一个程序 .................................... 9 1.6 程序剖析 ...................................... 11 1.6.1 注释 ..................................... 11 1.6.2 print()函数 ........................... 11 1.6.3 input()函数 .......................... 11 1.6.4 打印用户的名字 ................. 12 1.6.5 len()函数 ............................. 12 1.6.6 str()、int()和 float()函数 ..... 13 1.7 小结 ............................................... 15 1.8 习题 ............................................... 15 第 2 章 控制流 ............................................. 17 2.1 布尔值 .......................................... 18 2.2 比较操作符 ................................. 19 2.3 布尔操作符 ................................. 20 2.3.1 二元布尔操作符 .................20 2.3.2 not 操作符 ...........................21 2.4 混合布尔和比较操作符 ............. 21 2.5 控制流的元素 ............................. 22 2.5.1 条件 .....................................22 2.5.2 代码块 .................................22 2.6 程序执行 ...................................... 23 2.7 控制流语句 ................................. 23 2.7.1 if 语句 ..................................23 2.7.2 else 语句 ..............................24 2.7.3 elif 语句 ...............................25 2.7.4 while 循环语句 ...................30 2.7.5 恼人的循环 .........................31 2.7.6 break 语句 ...........................33 2.7.7 continue 语句 .......................34 2.7.8 for 循环和 range()函数 .......37 2.7.9 等价的 while 循环...............39
Page
18
目 录 2.7.10 range()的开始、停止和 步长参数 ........................... 39 2.8 导入模块 ...................................... 40 from import 语句 ............................. 41 2.9 用 sys.exit()提前结束程序 ......... 41 2.10 小结 ............................................. 41 2.11 习题 ............................................. 41 第 3 章 函数 ................................................. 43 3.1 def 语句和参数 ............................ 44 3.2 返回值和 return 语句 .................. 45 3.3 None 值 ......................................... 46 3.4 关键字参数和 print() .................. 47 3.5 局部和全局作用域 ...................... 48 3.5.1 局部变量不能在全局作用 域内使用 ............................. 48 3.5.2 局部作用域不能使用其他 局部作用域内的变量 ......... 49 3.5.3 全局变量可以在局部作用 域中读取 ............................. 49 3.5.4 名称相同的局部变量和全局 变量 ..................................... 50 3.6 global 语句 ................................... 50 3.7 异常处理 ...................................... 52 3.8 一个小程序:猜数字 ................. 54 3.9 小结 ............................................... 55 3.10 习题 ............................................. 56 3.11 实践项目 .................................... 56 3.11.1 Collatz 序列 ....................... 56 3.11.2 输入验证 ........................... 57 第 4 章 列表 ................................................. 59 4.1 列表数据类型 .............................. 59 4.1.1 用下标取得列表中的 单个值 ................................. 60 4.1.2 负数下标 ............................. 61 4.1.3 利用切片取得子列表 ......... 61 4.1.4 用 len()取得列表的长度 ..... 62 4.1.5 用下标改变列表中的值 .....62 4.1.6 列表连接和列表复制 .........62 4.1.7 用 del 语句从列表中 删除值 .................................63 4.2 使用列表 ...................................... 63 4.2.1 列表用于循环 .....................64 4.2.2 in 和 not in 操作符 ..............65 4.2.3 多重赋值技巧 .....................66 4.3 增强的赋值操作 ......................... 66 4.4 方法 .............................................. 67 4.4.1 用 index()方法在列表中 查找值 .................................67 4.4.2 用 append()和 insert()方法在 列表中添加值 .....................68 4.4.3 用 remove()方法从列表中 删除值 .................................69 4.4.4 用 sort()方法将列表中的值 排序 .....................................69 4.5 例子程序:神奇 8 球和列表 .... 70 4.6 类似列表的类型:字符串和 元组 .............................................. 71 4.6.1 可变和不可变数据类型 .....72 4.6.2 元组数据类型 .....................73 4.6.3 用 list()和 tuple()函数来 转换类型 .............................74 4.7 引用 .............................................. 75 4.7.1 传递引用 .............................76 4.7.2 copy 模块的 copy()和 deepcopy()函数 ...................77 4.8 小结 .............................................. 78 4.9 习题 .............................................. 78 4.10 实践项目.................................... 79 4.10.1 逗号代码 ...........................79 4.10.2 字符图网格 .......................79 第 5 章 字典和结构化数据 .........................81 5.1 字典数据类型 ............................. 81
Page
19
目 录 5.1.1 字典与列表 ......................... 82 5.1.2 keys()、values()和 items() 方法 ..................................... 83 5.1.3 检查字典中是否存在键 或值 ..................................... 84 5.1.4 get()方法 ............................. 84 5.1.5 setdefault()方法 ................... 85 5.2 漂亮打印 ...................................... 86 5.3 使用数据结构对真实世界建模 .... 87 5.3.1 井字棋盘 ............................. 88 5.3.2 嵌套的字典和列表 ............. 91 5.4 小结 ............................................... 92 5.5 习题 ............................................... 93 5.6 实践项目 ...................................... 93 5.6.1 好玩游戏的物品清单 ......... 93 5.6.2 列表到字典的函数,针对 好玩游戏物品清单 ............. 94 第 6 章 字符串操作 ..................................... 95 6.1 处理字符串 .................................. 95 6.1.1 字符串字面量 ..................... 95 6.1.2 双引号 ................................. 96 6.1.3 转义字符 ............................. 96 6.1.4 原始字符串 ......................... 96 6.1.5 用三重引号的多行字符串 .... 97 6.1.6 多行注释 ............................. 97 6.1.7 字符串下标和切片 ............. 98 6.1.8 字符串的 in 和 not in 操作符 ................................. 98 6.2 有用的字符串方法 ...................... 99 6.2.1 字符串方法 upper()、lower()、 isupper()和 islower()............99 6.2.2 isX 字符串方法 ................. 100 6.2.3 字符串方法 startswith()和 endswith() .......................... 102 6.2.4 字符串方法 join()和 split() .................................. 102 6.2.5 用 rjust()、ljust()和 center() 方法对齐文本 ................... 103 6.2.6 用 strip()、rstrip()和 lstrip() 删除空白字符 ................... 104 6.2.7 用 pyperclip 模块拷贝粘贴字 符串 ................................... 105 6.3 项目:口令保管箱 ................... 106 第 1 步:程序设计和数据结构 ..... 106 第 2 步:处理命令行参数 ........... 106 第 3 步:复制正确的口令 ........... 107 6.4 项目:在 Wiki 标记中添加无序 列表 ............................................ 108 第 1 步:从剪贴板中复制和 粘贴 ............................... 108 第 2 步:分离文本中的行,并添加 星号 ............................... 109 第 3 步:连接修改过的行 ........... 109 6.5 小结 ............................................ 110 6.6 习题 ............................................ 110 6.7 实践项目 ..................................... 111 表格打印 ....................................... 111 第二部分 自动化任务 第 7 章 模式匹配与正则表达式 ............... 115 7.1 不用正则表达式来查找文本 模式 ............................................ 116 7.2 用正则表达式查找文本模式 .... 117 7.2.1 创建正则表达式对象 ....... 118 7.2.2 匹配 Regex 对象 ............... 118 7.2.3 正则表达式匹配复习 ....... 119
Page
20
目 录 7.3 用正则表达式匹配更多模式 ..... 119 7.3.1 利用括号分组 ................... 119 7.3.2 用管道匹配多个分组 ....... 120 7.3.3 用问号实现可选匹配 ....... 121 7.3.4 用星号匹配零次或多次..... 121 7.3.5 用加号匹配一次或多次..... 122 7.3.6 用花括号匹配特定次数 .... 122 7.4 贪心和非贪心匹配 .................... 123 7.5 findall()方法 ............................... 124 7.6 字符分类 .................................... 124 7.7 建立自己的字符分类 ............... 125 7.8 插入字符和美元字符 ............... 126 7.9 通配字符 .................................... 126 7.9.1 用点-星匹配所有字符 ...... 127 7.9.2 用句点字符匹配换行 ....... 127 7.10 正则表达式符号复习 ............. 128 7.11 不区分大小写的匹配.............. 128 7.12 用 sub()方法替换字符串 ........ 129 7.13 管理复杂的正则表达式 ......... 129 7.14 组合使用 re.IGNOREC ASE、 re.DOTALL 和 re.VERBOSE ... 130 7.15 项目:电话号码和 E-mail 地址 提取程序 ................................. 130 第 1 步:为电话号码创建一个正则 表达式 ........................... 131 第 2 步:为 E-mail 地址创建一个 正则表达式 ................... 132 第 3 步:在剪贴板文本中找到所有 匹配 ............................... 132 第 4 步:所有匹配连接成一个字符 串,复制到剪贴板 ....... 133 第 5 步:运行程序 ....................... 133 第 6 步:类似程序的构想 ........... 134 7.16 小结 ........................................... 134 7.17 习题 ........................................... 134 7.18 实践项目 .................................. 136 7.18.1 强口令检测 ..................... 136 7.18.2 strip()的正则表达式 版本 ................................. 136 第 8 章 读写文件 ....................................... 137 8.1 文件与文件路径 ....................... 137 8.1.1 Windows 上的倒斜杠以及 OS X 和 Linux 上的 正斜杠 ............................... 138 8.1.2 当前工作目录 ................... 139 8.1.3 绝对路径与相对路径 ....... 139 8.1.4 用 os.makedirs()创建新 文件夹 ............................... 140 8.1.5 os.path 模块 ....................... 140 8.1.6 处理绝对路径和相对 路径 ................................... 141 8.1.7 查看文件大小和文件夹 内容 ................................... 142 8.1.8 检查路径有效性 ............... 143 8.2 文件读写过程 ........................... 144 8.2.1 用 open()函数打开文件 ..... 145 8.2.2 读取文件内容 ................... 145 8.2.3 写入文件 ........................... 146 8.3 用 shelve 模块保存变量 .......... 147 8.4 用 pprint.pformat()函数保存 变量 ............................................ 148 8.5 项目:生成随机的测验试卷 文件 ............................................ 149 第 1 步:将测验数据保存在一个 字典中 ........................... 149 第 2 步:创建测验文件,并打乱 问题的次序 ................... 150 第 3 步:创建答案选项 ............... 151 第 4 步:将内容写入测验试卷和 答案文件 ....................... 151 8.6 项目:多重剪贴板 ................... 153
The above is a preview of the first 20 pages. Register to read the complete e-book.
Comments 0
Loading comments...
Reply to Comment
Edit Comment