Python编程从认知到实践(第1辑)(套装共3册)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-07 12:17:26

点击下载

作者:(美)艾伦 B.唐尼,(美)斯维加特,(澳)理查德·劳森

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python编程从认知到实践(第1辑)(套装共3册)

Python编程从认知到实践(第1辑)(套装共3册)试读:

前言

本书的读者对象

编码规范

什么是编程

什么是Python

程序员不需要知道太多数学

编程是创造性活动

本书简介

下载和安装Python

启动IDLE

交互式环境

如何寻求帮助

聪明地提出编程问题

小结

第一部分 Python编程基础

第1章 Python基础

1.1 在交互式环境中输入表达式

错误没关系!

1.2 整型、浮点型和字符串数据类型

1.3 字符串连接和复制

1.4 在变量中保存值

1.4.1 赋值语句

1.4.2 变量名

1.5 第一个程序

1.6 程序剖析

1.6.1 注释

1.6.2 print()函数

1.6.3 input()函数

1.6.4 打印用户的名字

1.6.5 len()函数

1.6.6 str()、int()和float()函数

文本和数字相等判断

1.7 小结

1.8 习题

第2章 控制流

2.1 布尔值

2.2 比较操作符

操作符的区别

2.3 布尔操作符

2.3.1 二元布尔操作符

2.3.2 not操作符

2.4 混合布尔和比较操作符

2.5 控制流的元素

2.5.1 条件

2.5.2 代码块

2.6 程序执行

2.7 控制流语句

2.7.1 if语句

2.7.2 else语句

2.7.3 elif语句

2.7.4 while循环语句

2.7.5 恼人的循环

2.7.6 break语句

2.7.7 continue语句

陷在无限循环中?

2.7.8 for循环和range()函数“类真”和“类假”的值

2.7.9 等价的while循环

2.7.10 range()的开始、停止和步长参数

2.8 导入模块

from import语句

2.9 用sys.exit()提前结束程序

2.10 小结

2.11 习题

第3章 函数

3.1 def语句和参数

3.2 返回值和return语句

3.3 None值

3.4 关键字参数和print()

3.5 局部和全局作用域

3.5.1 局部变量不能在全局作用域内使用

3.5.2 局部作用域不能使用其他局部作用域内的变量

3.5.3 全局变量可以在局部作用域中读取

3.5.4 名称相同的局部变量和全局变量

3.6 global语句

3.7 异常处理

函数作为“黑盒”

3.8 一个小程序:猜数字

3.9 小结

3.10 习题

3.11 实践项目

3.11.1 Collatz序列

3.11.2 输入验证

第4章 列表

4.1 列表数据类型

4.1.1 用下标取得列表中的单个值

4.1.2 负数下标

4.1.3 利用切片取得子列表

4.1.4 用len()取得列表的长度

4.1.5 用下标改变列表中的值

4.1.6 列表连接和列表复制

4.1.7 用del语句从列表中删除值

4.2 使用列表

4.2.1 列表用于循环

4.2.2 in和not in操作符

4.2.3 多重赋值技巧

4.3 增强的赋值操作

4.4 方法

4.4.1 用index()方法在列表中查找值

4.4.2 用append()和insert()方法在列表中添加值

4.4.3 用remove()方法从列表中删除值

4.4.4 用sort()方法将列表中的值排序

4.5 例子程序:神奇8球和列表

Python中缩进规则的例外

4.6 类似列表的类型:字符串和元组

4.6.1 可变和不可变数据类型

4.6.2 元组数据类型

4.6.3 用list()和tuple()函数来转换类型

4.7 引用

4.7.1 传递引用

4.7.2 copy模块的copy()和deepcopy()函数

4.8 小结

4.9 习题

4.10 实践项目

4.10.1 逗号代码

4.10.2 字符图网格

第5章 字典和结构化数据

5.1字典数据类型

5.1.1 字典与列表

5.1.2keys()、values()和items()方法

5.1.3 检查字典中是否存在键或值

5.1.4 get()方法

5.1.5 setdefault()方法

5.2 漂亮打印

5.3 使用数据结构对真实世界建模

5.3.1 井字棋盘

5.3.2 嵌套的字典和列表

5.4 小结

5.5 习题

5.6 实践项目

5.6.1 好玩游戏的物品清单

5.6.2 列表到字典的函数,针对好玩游戏物品清单

第6章 字符串操作

6.1 处理字符串

6.1.1 字符串字面量

6.1.2 双引号

6.1.3 转义字符

6.1.4 原始字符串

6.1.5 用三重引号的多行字符串

6.1.6 多行注释

6.1.7 字符串下标和切片

6.1.8 字符串的in和not in操作符

6.2 有用的字符串方法

6.2.1 字符串方法upper()、lower()、isupper()和islower()

6.2.2 isX字符串方法

6.2.3 字符串方法startswith()和endswith()

6.2.4 字符串方法join()和split()

6.2.5 用rjust()、ljust()和center()方法对齐文本

6.2.6 用strip()、rstrip()和lstrip()删除空白字符

6.2.7 用pyperclip模块拷贝粘贴字符串

在IDLE之外运行Python脚本

6.3 项目:口令保管箱

第1步:程序设计和数据结构

第2步:处理命令行参数

第3步:复制正确的口令

6.4 项目:在Wiki标记中添加无序列表

第1步:从剪贴板中复制和粘贴

第2步:分离文本中的行,并添加星号

第3步:连接修改过的行

6.5 小结

6.6 习题

6.7 实践项目

表格打印

第二部分 自动化任务

第7章 模式匹配与正则表达式

7.1 不用正则表达式来查找文本模式

7.2 用正则表达式查找文本模式

7.2.1 创建正则表达式对象

7.2.2 匹配Regex对象

向re.compile()传递原始字符串

7.2.3 正则表达式匹配复习

7.3 用正则表达式匹配更多模式

7.3.1 利用括号分组

7.3.2 用管道匹配多个分组

7.3.3 用问号实现可选匹配

7.3.4 用星号匹配零次或多次

7.3.5 用加号匹配一次或多次

7.3.6 用花括号匹配特定次数

7.4 贪心和非贪心匹配

7.5 findall()方法

7.6 字符分类

7.7 建立自己的字符分类

7.8 插入字符和美元字符

7.9 通配字符

7.9.1 用点-星匹配所有字符

7.9.2 用句点字符匹配换行

7.10 正则表达式符号复习

7.11 不区分大小写的匹配

7.12 用sub()方法替换字符串

7.13 管理复杂的正则表达式

7.14 组合使用re.IGNOREC ASE、re.DOTALL和re.VERBOSE

7.15 项目:电话号码和E-mail地址提取程序

第1步:为电话号码创建一个正则表达式

第2步:为E-mail地址创建一个正则表达式

第3步:在剪贴板文本中找到所有匹配

第4步:所有匹配连接成一个字符串,复制到剪贴板

第5步:运行程序

第6步:类似程序的构想

7.16 小结

7.17 习题

7.18 实践项目

7.18.1 强口令检测

7.18.2 strip()的正则表达式版本

第8章 读写文件

8.1 文件与文件路径

8.1.1Windows上的倒斜杠以及OSX和Linux上的正斜杠

8.1.2 当前工作目录

8.1.3 绝对路径与相对路径

8.1.4 用os.makedirs()创建新文件夹

8.1.5 os.path模块

8.1.6 处理绝对路径和相对路径

8.1.7 查看文件大小和文件夹内容

8.1.8 检查路径有效性

8.2 文件读写过程

8.2.1 用open()函数打开文件

8.2.2 读取文件内容

8.2.3 写入文件

8.3 用shelve模块保存变量

8.4 用pprint.pformat()函数保存变量

8.5 项目:生成随机的测验试卷文件

第1步:将测验数据保存在一个字典中

第2步:创建测验文件,并打乱问题的次序

第3步:创建答案选项

第4步:将内容写入测验试卷和答案文件

8.6 项目:多重剪贴板

第1步:注释和shelf设置

第2步:用一个关键字保存剪贴板内容

第3步:列出关键字和加载关键字的内容

8.7 小结

8.8 习题

8.9 实践项目

8.9.1 扩展多重剪贴板

8.9.2 疯狂填词

8.9.3 正则表达式查找

第9章 组织文件

9.1 shutil模块

9.1.1 复制文件和文件夹

9.1.2 文件和文件夹的移动与改名

9.1.3 永久删除文件和文件夹

9.1.4 用send2trash模块安全地删除

9.2 遍历目录树

9.3 用zipfile模块压缩文件

9.3.1 读取ZIP文件

9.3.2 从ZIP文件中解压缩

9.3.3 创建和添加到ZIP文件

9.4 项目:将带有美国风格日期的文件改名为欧洲风格日期

第1步:为美国风格的日期创建一个正则表达式

第2步:识别文件名中的日期部分

第3步:构成新文件名,并对文件改名

第4步:类似程序的想法

9.5 项目:将一个文件夹备份到一个ZIP文件

第1步:弄清楚ZIP文件的名称

第2步:创建新ZIP文件

第3步:遍历目录树并添加到ZIP文件

第4步:类似程序的想法

9.6 小结

9.7 习题

9.8 实践项目

9.8.1 选择性拷贝

9.8.2 删除不需要的文件

9.8.3 消除缺失的编号

第10章 调试

10.1 抛出异常

10.2 取得反向跟踪的字符串

10.3 断言

10.3.1 在交通灯模拟中使用断言

10.3.2 禁用断言

10.4 日志

10.4.1 使用日志模块

10.4.2 不要用print()调试

10.4.3 日志级别

10.4.4 禁用日志

10.4.5 将日志记录到文件

10.5 IDLE的调试器

10.5.1 Go

10.5.2 Step

10.5.3 Over

10.5.4 Out

10.5.5 Quit

10.5.6 调试一个数字相加的程序

10.5.7 断点

10.6 小结

10.7 习题

10.8 实践项目

调试硬币抛掷

第11章 从Web抓取信息

11.1 项目:利用webbrowser模块的mapIt.py

第1步:弄清楚URL

第2步:处理命令行参数

第3步:处理剪贴板内容,加载浏览器

第4步:类似程序的想法

11.2 用requests模块从Web下载文件

11.2.1 用requests.get()函数下载一个网页

11.2.2 检查错误

11.3 将下载的文件保存到硬盘

Unicode编码

11.4 HTML

11.4.1 学习HTML的资源

11.4.2 快速复习

11.4.3 查看网页的HTML源代码

11.4.4 打开浏览器的开发者工具

不要用正则表达式来解析HTML

11.4.5 使用开发者工具来寻找HTML元素

11.5 用BeautifulSoup模块解析HTML

11.5.1 从HTML创建一个BeautifulSoup对象

11.5.2 用select()方法寻找元素

11.5.3 通过元素的属性获取数据

11.6 项目:“I' m Feeling Lucky”Google查找

第1步:获取命令行参数,并请求查找页面

第2步:找到所有的结果

第3步:针对每个结果打开Web浏览器

第4步:类似程序的想法

11.7 项目:下载所有XKCD漫画

第1步:设计程序

第2步:下载网页

第3步:寻找和下载漫画图像

第4步:保存图像,找到前一张漫画

第5步:类似程序的想法

11.8 用selenium模块控制浏览器

11.8.1 启动selenium控制的浏览器

11.8.2 在页面中寻找元素

11.8.3 点击页面

11.8.4 填写并提交表单

11.8.5 发送特殊键

11.8.6 点击浏览器按钮

11.8.7 关于selenium的更多信息

11.9 小结

11.10 习题

11.11 实践项目

11.11.1 命令行邮件程序

11.11.2 图像网站下载

11.11.3 2048

11.11.4 链接验证

第12章 处理Excel电子表格

12.1 Excel文档

12.2 安装openpyxl模块

12.3 读取Excel文档

12.3.1 用openpyxl模块打开Excel文档

12.3.2 从工作簿中取得工作表

12.3.3 从表中取得单元格

12.3.4 列字母和数字之间的转换

12.3.5 从表中取得行和列

12.3.6 工作簿、工作表、单元格

12.4 项目:从电子表格中读取数据

第1步:读取电子表格数据

第2步:填充数据结构

第3步:将结果写入文件

第4步:类似程序的思想

12.5 写入Excel文档

12.5.1 创建并保存Excel文档

12.5.2 创建和删除工作表

12.5.3 将值写入单元格

12.6 项目:更新一个电子表格

第1步:利用更新信息建立数据结构

第2步:检查所有行,更新不正确的价格

第3步:类似程序的思想

12.7 设置单元格的字体风格

12.8 Font对象

12.9 公式

12.10 调整行和列

12.10.1 设置行高和列宽

12.10.2 合并和拆分单元格

12.10.3 冻结窗格

12.10.4 图表

12.11 小结

12.12 习题

12.13 实践项目

12.13.1 乘法表

12.13.2 空行插入程序

12.13.3 电子表格单元格翻转程序

12.13.4 文本文件到电子表格

12.13.5 电子表格到文本文件

第13章 处理PDF和Word文档

13.1 PDF文档

13.1.1 从PDF提取文本

有问题的PDF格式

13.1.2 解密PDF

13.1.3 创建PDF

13.1.4 拷贝页面

13.1.5 旋转页面

13.1.6 叠加页面

13.1.7 加密PDF

13.2 项目:从多个PDF中合并选择的页面

第1步:找到所有PDF文件

第2步:打开每个PDF文件

第3步:添加每一页

第4步:保存结果

第5步:类似程序的想法

13.3 Word文档

13.3.1 读取Word文档

13.3.2 从.docx文件中取得完整的文本

13.3.3 设置Paragraph和Run对象的样式

13.3.4 创建带有非默认样式的Word文档

13.3.5 Run属性

13.3.6 写入Word文档

13.3.7 添加标题

13.3.8 添加换行符和换页符

13.3.9 添加图像

13.4 小结

13.5 习题

13.6 实践项目

13.6.1 PDF偏执狂

13.6.2 定制邀请函,保存为Word文档

13.6.3 暴力PDF口令破解程序

第14章 处理CSV文件和JSON数据

14.1 csv模块

14.1.1 Reader对象

14.1.2 在for循环中,从Reader对象读取数据

14.1.3 Writer对象

14.1.4 delimiter和lineterminator关键字参数

14.2 项目:从CSV文件中删除表头

警告

第1步:循环遍历每个CSV文件

第2步:读入CSV文件

第3步:写入CSV文件,没有第一行

第4步:类似程序的想法

14.3 JSON和API

14.4 json模块

14.4.1 用loads()函数读取JSON

14.4.2 用dumps函数写出JSON

14.5 项目:取得当前的天气数据

第1步:从命令行参数获取位置

第2步:下载JSON数据

第3步:加载JSON数据并打印天气

第4步:类似程序的想法

14.6 小结

14.7 习题

14.8 实践项目

Excel到CSV的转换程序

第15章 保持时间、计划任务和启动程序

15.1 time模块

15.1.1 time.time()函数

15.1.2 time.sleep()函数

15.2 数字四舍五入

15.3 项目:超级秒表

第1步:设置程序来记录时间

第2步:记录并打印单圈时间

第3步:类似程序的想法

15.4 datetime模块

注意

15.4.1 timedelta数据类型

15.4.2 暂停直至特定日期

15.4.3 将datetime对象转换为字符串

15.4.4 将字符串转换成datetime对象

15.5 回顾Python的时间函数

15.6 多线程

15.6.1 向线程的目标函数传递参数

15.6.2 并发问题

15.7 项目:多线程XKCD下载程序

第1步:修改程序以使用函数

第2步:创建并启动线程

第3步:等待所有线程结束

15.8 从Python启动其他程序

15.8.1 向Popen()传递命令行参数

15.8.2 Task Scheduler、launchd和cron

15.8.3 用Python打开网站

15.8.4 运行其他Python脚本

15.8.5 用默认的应用程序打开文件

Unix哲学

15.9 项目:简单的倒计时程序

第1步:倒计时

第2步:播放声音文件

第3步:类似程序的想法

15.10 小结

15.11 习题

15.12 实践项目

15.12.1 美化的秒表

15.12.2 计划的Web漫画下载

第16章 发送电子邮件和短信

16.1 SMTP

16.2 发送电子邮件

16.2.1 连接到SMTP服务器

16.2.2 发送SMTP的“Hello”消息

16.2.3 开始TLS加密

16.2.4 登录到SMTP服务器

16.2.5 发送电子邮件

Gmail应用程序专用密码

16.2.6 从SMTP服务器断开

16.3 IMAP

16.4 用IMAP获取和删除电子邮件

16.4.1 连接到IMAP服务器

16.4.2 登录到IMAP服务器

16.4.3 搜索电子邮件

16.4.4 选择文件夹

16.4.5 执行搜索

16.4.6 大小限制

16.4.7 取邮件并标记为已读

16.4.8 从原始消息中获取电子邮件地址

16.4.9 从原始消息中获取正文

16.4.10 删除电子邮件

16.4.11 从IMAP服务器断开

16.5 项目:向会员发送会费提醒电子邮件

第1步:打开Excel文件

第2步:查找所有未付成员

第3步:发送定制的电子邮件提醒

16.6 用Twilio发送短信

16.6.1 注册Twilio账号

16.6.2 发送短信

用Python接收短信

16.7 项目:“只给我发短信”模块

16.8 小结

16.9 习题

16.10 实践项目

16.10.1 随机分配家务活的电子邮件程序

16.10.2 伞提醒程序

16.10.3 自动退订

16.10.4 通过电子邮件控制你的电脑

第17章 操作图像

17.1 计算机图像基础

17.1.1 颜色和RGBA值

17.1.2 坐标和Box元组

CMYK和RGB着色

17.2 用Pillow操作图像

17.2.1 处理Image数据类型

17.2.2 裁剪图片

17.2.3 复制和粘贴图像到其他图像

17.2.4 调整图像大小

粘贴透明像素

17.2.5 旋转和翻转图像

17.2.6 更改单个像素

17.3 项目:添加徽标

第1步:打开徽标图像

第2步:遍历所有文件并打开图像

第3步:调整图像的大小

第4步:添加徽标,并保存更改

第5步:类似程序的想法

17.4 在图像上绘画

17.4.1 绘制形状

17.4.2 绘制文本

17.5 小结

17.6 习题

17.7 实践项目

17.7.1 扩展和修正本章项目的程序

17.7.2 在硬盘上识别照片文件夹

17.7.3 定制的座位卡

第18章 用GUI自动化控制键盘和鼠标

18.1 安装pyautogui模块

18.2 走对路

18.2.1 通过注销关闭所有程序

18.2.2 暂停和自动防故障装置

18.3 控制鼠标移动

18.3.1 移动鼠标

18.3.2 获取鼠标位置

18.4 项目:“现在鼠标在哪里?”

第1步:导入模块

第2步:编写退出代码和无限循环

第3步:获取并打印鼠标坐标

18.5 控制鼠标交互

18.5.1 点击鼠标

18.5.2 拖动鼠标

18.5.3 滚动鼠标

18.6 处理屏幕

18.6.1 获取屏幕快照

18.6.2 分析屏幕快照

18.7 项目:扩展mouseNow程序

18.8 图像识别

18.9 控制键盘

18.9.1 通过键盘发送一个字符串

18.9.2 键名

18.9.3 按下和释放键盘

18.9.4 热键组合

18.10 复习PyAutoGUI的函数

18.11 项目:自动填表程序

第1步:弄清楚步骤

第2步:建立坐标

第3步:开始键入数据

第4步:处理选择列表和单选按钮

第5步:提交表单并等待

18.12 小结

18.13 习题

18.14 实践项目

18.14.1 看起来很忙

18.14.2 即时通信机器人

18.14.3 玩游戏机器人指南

附录A 安装第三方模块

A.1 pip工具

A.2 安装第三方模块

附录B 运行程序

B.1 第一行

B.2 在Windows上运行Python程序

B.3 在OS X和Linux上运行Python程序

B.4 运行Python程序时禁用断言

附录C 习题答案

第1章

第2章

第3章

第4章

第5章

第6章

第7章

第8章

第9章

第10章

第11章

第12章

第13章

第14章

第15章

第16章

第17章

第18章返回总目录内容提要

如今,人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程,我们能够解决现实生活中的很多任务。

本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的第一部分介绍了基本的Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。

本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用最强大的编程语言和工具,并且将体会到Python编程的快乐。作者简介

Al Sweigart是一名软件开发者和技术图书作者,居住在旧金山。Python是他最喜欢的编程语言,他开发了几个开源模块。他的其他著作都在他的网站http://www. inventwithpython.com/上。技术评审者简介

Ari Lacenski是Android应用程序和Python软件开发者。她住在旧金山,她写了一些关于Android编程的文章,放在http://gradlewhy.ghost.io/上,并与Women Who Code合作提供指导。她还是一个民谣吉他手。致谢

没有很多人的帮助,我不可能写出这样一本书。我想感谢Bill Pollock,我的编辑Laurel Chun、Leslie Shen、Greg Poulos和Jennifer Griffith-Delgado,以及No Starch Press的其他工作人员,感谢他们非常宝贵的帮助。感谢我的技术评审Ari Lacenski,她提供了极好的建议、编辑和支持。

非常感谢Guido van Rossum,以及Python软件基金会的每个人,感谢他们了不起的工作。Python社区是我在业界看到的最佳社区。

最后,我要感谢我的家人和朋友,以及在Shotwell的伙伴,他们不介意我在写这本书时忙碌的生活。干杯!译者序会编程的人不一样

这是机器代替人的时代,也是人控制机器的时代。这是程序员的时代,也是非程序员学编程的时代。这是算法的时代,也是编程语言的时代。翻译本书期间,深度学习的人工智能程序AlphaGo以4:1击败了李世石九段。

每一个不会编程的年轻人都应该认真考虑:是不是应该开始学习编程?

学习一门新的语言,总是让人感到畏缩。这让我想起大学时英语老师教的学习方法:听说领先,读写跟上。确实,学语言效果最好的方法就是“用”。本书就遵循了这样的宗旨。本书是面对编程初学者的书,假定读者没有任何编程知识。在简单介绍Python编程语言的基本知识后,就开始用一个接一个的例子,教我们如何用Python来完成一些日常工作,利用计算机这个强大的工具,节省工作时间,提高工作效率,避免手工操作容易带来的错误。

真正的程序员,用编程来解决自己和别人的问题。俄罗斯有一个程序员编写了一个程序,会给老婆发加班短信,会在宿醉不醒时给自己请假,会自动根据邮件恢复客户的数据库,还可以一键远程煮咖啡。加拿大一名零编程基础的农场主,在学习了一门编程课后,开发了一个程序,自动控制拖拉机,配合联合收割机收割谷物。

若是已经掌握了其他编程语言,想学习Python,本书也是不错的参考。每一种编程语言,都会提供一种独特的视角,让你对编程有新的认识。我非常喜欢Python没有花括号和分号,程序很“清爽”,符合奥卡姆剃刀原理:如无必要,勿增实体。本书并没有深入介绍面向对象和函数式编程范式,如果想了解Python这方面的内容,请参考其他书籍。

在本书的翻译过程,我自己也在项目中使用Python编程,从中得到许多启发。因此,郑重向大家推荐。翻译中的错误,请不吝指出。王海鹏2016年春于上海前言“你在2个小时里完成的事,我们3个人要做两天。”21世纪早期,我的大学室友在一个电子产品零售商店工作。商店偶尔会收到一份电子表格,其中包含竞争对手的数千种产品的价格。由3个员工组成的团队,会将这个电子表格打印在一叠厚厚的纸上,然后3个人分一下。针对每个产品价格,他们会查看自己商店的价格,并记录竞争对手价格较低的所有产品。这通常会花几天的时间。“如果你有打印件的原始文件,我会写一个程序来做这件事。”我的室友告诉他们,当时他看到他们坐在地板上,周围都是散落堆叠的纸张。

几个小时后,他写了一个简短的程序,从文件读取竞争对手的价格,在商店的数据库中找到该产品,并记录竞争对手是否更便宜。他当时还是编程新手,花了许多时间在一本编程书籍中查看文档。实际上程序只花了几秒钟运行。我的室友和他的同事们那天享受了超长的午餐。

这就是计算机编程的威力。计算机就像瑞士军刀,可以用来完成数不清的任务。许多人花上数小时点击鼠标和敲打键盘,执行重复的任务,却没有意识到,如果他们给机器正确的指令,机器就能在几秒钟内完成他们的工作。本书的读者对象

软件是我们今天使用的许多工具的核心:几乎每个人都使用社交网络来进行交流,许多人的手机中都有连接因特网的计算机,大多数办公室工作都涉及操作计算机来完成工作。因此,对编程人才的需求暴涨。无数的图书、交互式网络教程和开发者新兵训练营,承诺将有雄心壮志的初学者变成软件工程师,获得6位数的薪水。

本书不是针对这些人的。它是针对所有其他的人。

就它本身来说,这本书不会让你变成一个职业软件开发者,就像几节吉他课程不会让你变成一名摇滚巨星。但如果你是办公室职员、管理者、学术研究者,或使用计算机来工作或娱乐的任何人,你将学到编程的基本知识,这样就能将下面这样一些简单的任务自动化:

●移动并重命名几千个文件,将它们分类,放入文件夹;

●填写在线表单,不需要打字;

●在网站更新时,从网站下载文件或复制文本;

●让计算机向客户发出短信通知;

●更新或格式化Excel电子表格;

●检查电子邮件并发出预先写好的回复。

对人来说,这些任务简单,但很花时间。它们通常很琐碎、很特殊,没有现成的软件可以完成。有一点编程知识,就可以让计算机为你完成这些任务。编码规范

本书没有设计成参考手册,它是初学者指南。编码风格有时候违反最佳实践(例如,有些程序使用全局变量),但这是一种折中,让代码更简单,以便学习。本书的目的是让人们编写用完即抛弃的代码,所以没有太多时间来关注风格和优雅。复杂的编程概念(如面向对象编程、列表推导和生成器),在本书中也没有介绍,因为它们增加了复杂性。编程老手可能会指出,本书中的代码可以修改得更有效率,但本书主要考虑的是用最少的工作量得到能工作的程序。什么是编程

在电视剧和电影中,常常看到程序员在闪光的屏幕上迅速地输入密码般的一串1和0,但现代编程没有这么神秘。编程只是输入指令让计算机来执行。这些指令可能运算一些数字,修改文本,在文件中查找信息,或通过因特网与其他计算机通信。

所有程序都使用基本指令作为构件块。下面是一些常用的指令,用自然语言的形式来表示:“做这个,然后做那个。”“如果这个条件为真,执行这个动作,否则,执行那个动作。”“按照指定次数执行这个动作。”“一直做这个,直到条件为真。”

也可以组合这些构件块,实现更复杂的决定。例如,这里有一些编程指令,称为源代码,是用Python编程语言编写的一个简单程序。从头开始,Python软件执行每行代码(有些代码只有在特定条件为真时执行,否则Python会执行另外一些代码),直到到达底部。

你可能对编程一无所知,但读了上面的代码,也许就能够合理地猜测它做的事。首先,打开了文件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方块中的其他位置。每次解决一行、一列或一个方块,将为剩下的部分提供更多的数字线索。

仅仅因为数独使用了数字,并不意味着必须精通数学才能求出答案。编程也是这样。就像解决数独问题一样,编程需要将一个问题分解为单个的、详细的步骤。类似地,在调试程序时(即寻找和修复错误),你会耐心地观察程序在做什么,找出缺陷的原因。像所有技能一样,编程越多,你就掌握得越好。图1 一个新的数独问题(左边)及其答案(右边)。尽管使用了数字,数独并不需要太多数学知识编程是创造性活动

编程是一项创造性任务,有点类似于用乐高积木构建一个城堡。你从基本的想法开始,希望城堡看起来像怎样,并盘点可用的积木。然后开始构建。在你完成构建程序后,可以让代码变得更美观,就像对你的城堡那样。

编程与其他创造性活动的不同之处在于,在编程时,你需要的所有原材料都在计算机中,你不需要购买额外的画布、颜料、胶片、纱线、乐高积木或电子器件。在程序写好后,很容易将它在线共享给整个世界。尽管在编程时你会犯错,这项活动仍然很有乐趣。本书简介

本书的第一部分介绍了基本Python编程概念,第二部分介绍了一些不同的任务,你可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供你学习。下面简单介绍一下每章的内容。

第一部分:Python编程基础“第1章:Python基础”介绍了表达式、Python指令的最基本类型,以及如何使用Python交互式环境来尝试运行代码。“第2章:控制流”解释了如何让程序决定执行哪些指令,以便代码能够智能地响应不同的情况。“第3章:函数”介绍了如何定义自己的函数,以便将代码组织成可管理的部分。“第4章:列表”介绍了列表数据类型,解释了如何组织数据。“第5章:字典和结构化数据”介绍了字典数据类型,展示了更强大的数据组织方法。“第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位的系统,但下面是确认的方法:

●在Windows上。选择Start▶ControlPanel▶System。检查系统类型是64位或32位。

●在OS X上,进入Apple菜单,选择About This Mac▶MoreInfo▶SystemReport▶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上,点击开始按钮,然后选择Programs▶Python 3.4▶IDLE(Python GUI)。

●在OS X上,打开Finder窗口,点击Applications,点击Python 3.4,然后点击IDLE的图标。

●在Ubuntu上,选择Applications▶Accessories▶Terminal,然后输入idle3(也许你也可以点击屏幕顶部的Applications,选择Programming,然后点击IDLE 3)。交互式环境

无论你使用什么操作系统,初次出现的IDLE窗口应该基本上是空的,除了类似下面这样的文本:

这个窗口称为交互式环境。这是让你向计算机输入指令的程序,很像OS X上的终端窗口,或Windows上的命令行提示符。Python的交互式环境让你输入指令,供Python解释器软件来执行。计算机读入你输入的指令,并立即执行它们。

例如,在交互式环境的>>>提示符后输入以下指令:

在输入该行并按下回车键后,交互式环境将显示以下内容作为响应:如何寻求帮助

独自解决编程问题可能比你想的要容易。如果你不相信,就让我们故意产生一个错误:在交互式环境中输入’42'+3。现在你不需要知道这条指令是什么意思,但结果看起来应该像这样:

这里出现了错误信息❷,因为Python不理解你的指令。错误信息的traceback部分❶显示了Python遇到困难的特定指令和行号。如果你不知道怎样处理特定的错误信息,就在线查找那条错误信息。在你喜欢的搜索引擎上输入“TypeError: Can' t convert 'int' object to str implicitly”(包括引号),你就会看到许多的链接,解释这条错误信息的含义,以及什么原因导致这条错误,如图2所示。

你常常会发现,别人也遇到了同样的问题,而其他乐于助人的人已经回答了这个问题。没有人知道编程的所有方面,所以所有软件开发者的工作,都是每天在寻找技术问题的答案。图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/。

●解释你为了解决这个问题已经尝试了哪些方法。这会告诉别人你已经做了一些工作来弄清楚状况。小结

●列出你使用的Python版本(Python 2解释器和Python3解释器之间有一些重要的区别)。而且,要说明你使用的操作系统和版本。

●如果错误在你更改了代码之后出现,准确说明你改了什么。

●说明你是否在每次运行该程序时都能重现该错误,或者它只是在特定的操作执行之后才出现。如果是这样,解释是哪些操作。

也要遵守良好的在线礼节。例如,不要全用大写提问,或者对试图帮助你的人提出无理的要求。

对于大多数人,他们的计算机只是设备,而不是工具。但通过学习如何编程,你就能利用现代社会中最强大的工具,并且你会一直感到快乐。编程不是脑外科手术,业余人士是完全可以尝试或犯错的。

我喜欢帮助人们探索Python。我在自己的博客上编写编程指南(http://inventwithpython.com/blog/),你可以发邮件向我提问(al@inventwithpython.com)。

本书将从零编程知识开始,但你的问题可能超出本书的范围。记住如何有效地提问,知道如何寻找答案,这对你的编程之旅是无价的工具。

让我们开始吧!第一部分Python编程基础第1章Python基础

Python编程语言有许多语法结构、标准库函数和交互式开发环境功能。好在,你可以忽略大多数内容。你只需要学习部分内容,就能编写一些方便的小程序。

但在动手之前,你必须学习一些基本编程概念。就像魔法师培训,你可能认为这些概念既深奥又啰嗦,但有了一些知识和实践,你就能像魔法师一样指挥你的计算机,完成难以置信的事情。

本章有几个例子,我们鼓励你在交互式环境中输入它们。交互式环境让你每次执行一条Python指令,并立即显示结果。使用交互式环境对于了解基本Python指令的行为是很好的,所以你在阅读时要试一下。做过的事比仅仅读过的内容,更令人印象深刻。1.1 在交互式环境中输入表达式

启动IDLE就运行了交互式环境,这是和Python一起安装的。在Windows上,打开“开始”菜单,选择“All Programs▶Python 3.3”,然后选择“IDLE(Python GUI)”。在OS X上,选择“Applications▶MacPython 3.3▶IDLE”。在Ubuntu上,打开新的终端窗口并输入idle3。

一个窗口会出现,包含>>>提示符,这就是交互式环境。在提示符后输入2+2,让Python做一些简单的算术。

IDLE窗口现在应该显示下面这样的文本:

在Python中,2+2称为“表达式”,它是语言中最基本的编程结构。表达式包含“值”(例如2)和“操作符”(例如+),并且总是可以求值(也就是归约)为单个值。这意味着在Python代码中,所有使用表达式的地方,也可以使用一个值。

在前面的例子中,2+2被求值为单个值4。没有操作符的单个值也被认为是一个表达式,尽管它求值的结果就是它自己,像下面这样:错误没关系!如果程序包含计算机不能理解的代码,就会崩溃,这将导致Python显示错误信息。错误信息并不会破坏你的计算机,所以不要害怕犯错误。“崩溃”只是意味着程序意外地停止执行。如果你希望对一条错误信息了解更多,可以在网上查找这条信息的准确文本,找到关于这个错误的更多内容。也可以查看http://nostarch.com/automatestuff/,这里有常见的Python错误信息和含义的列表。

Python表达式中也可以使用大量其他操作符。例如,表1-1列出了Python的所有数学操作符。表1-1 数学操作符,优先级从高到低

数学操作符的操作顺序(也称为“优先级”)与数学中类似。**操作符首先求值,接下来是*、/、//和%操作符,从左到右。+和-操作符最后求值,也是从左到右。如果需要,可以用括号来改变通常的优先级。在交互式环境中输入下列表达式:

在每个例子中,作为程序员,你必须输入表达式,但Python完成较难的工作,将它求值为单个值。Python将继续求值表达式的各个部分,直到它成为单个值,如图1-1所示。图1-1 表达式求值将它归约为单个值

将操作符和值放在一起构成表达式的这些规则,是Python编程语言的基本部分,就像帮助我们沟通的语法规则一样。下面是例子:

This is a grammatically correct English sentence.

This grammatically is sentence not English correct a.

第二行很难解释,因为它不符合英语的规则。类似地,如果你输入错误的Python指令,Python也不能理解,就会显示出错误信息,像下面这样:

你总是可以在交互式环境中输入一条指令,检查它是否能工作。不要担心会弄坏计算机:最坏的情况就是Python显示出错信息。专业的软件开发者在编写代码时,常常会遇到错误信息。1.2 整型、浮点型和字符串数据类型

记住,表达式是值和操作符的组合,它们可以通过求值成为单个值。“数据类型”是一类值,每个值都只属于一种数据类型。表1-2列出了Python中最常见的数据类型。例如,值-2和30属于“整型”值。整型(或int)数据类型表明值是整数。带有小数点的数,如3.14,称为“浮点型”(或float)。请注意,尽管42是一个整型,但42.0是一个浮点型。表1-2 常见数据类型

Python程序也可以有文本值,称为“字符串”,或strs(发音为“stirs”)。总是用单引号(' )包围住字符串(例如’Hello’或’Goodbye cruel world! ' ),这样Python就知道字符串的开始和结束。甚至可以有没有字符的字符串,称为“空字符串”。第4章更详细地解释了字符串。

如果你看到错误信息SyntaxError: EOL while scanning string literal,可能是忘记了字符串末尾的单引号,如下面的例子所示:1.3 字符串连接和复制

根据操作符之后的值的数据类型,操作符的含义可能会改变。例如,在操作两个整型或浮点型值时,+是相加操作符。但是,在用于两个字符串时,它将字符串连接起来,成为“字符串连接”操作符。在交互式环境中输入以下内容:

该表达式求值为一个新字符串,包含了两个字符串的文本。但是,如果你对一个字符串和一个整型值使用加操作符,Python就不知道如何处理,它将显示一条错误信息。

错误信息Can' t convert ' int' object to str implicitly表示Python认为,你试图将一个整数连接到字符串’Alice'。代码必须显式地将整数转换为字符串,因为Python不能自动完成转换。(1.6节“程序剖析”在讨论函数时,将解释数据类型转换。)

在用于两个整型或浮点型值时,*操作符表示乘法。但*操作符用于一个字符串值和一个整型值时,它变成了“字符串复制”操作符。在交互式环境中输入一个字符串乘一个数字,看看效果。

该表达式求值为一个字符串,它将原来的字符串重复若干次,次数就是整型的值。字符串复制是一个有用的技巧,但不像字符串连接那样常用。

*操作符只能用于两个数字(作为乘法),或一个字符串和一个整型(作为字符串复制操作符)。否则,Python将显示错误信息。

Python不理解这些表达式是有道理的:你不能把两个单词相乘,也很难将一个任意字符串复制小数次。1.4 在变量中保存值“变量”就像计算机内存中的一个盒子,其中可以存放一个值。如果你的程序稍后将用到一个已求值的表达式的结果,就可以将它保存在一个变量中。1.4.1 赋值语句

用“赋值语句”将值保存在变量中。赋值语句包含一个变量名、一个等号(称为赋值操作符),以及要存储的值。如果输入赋值语句spam = 42,那么名为spam的变量将保存一个整型值42。

可以将变量看成一个带标签的盒子,值放在其中,如图1-2所示。图1-2 spam=42就像是告诉程序“变量spam现在有整数42放在里面”

例如,在交互式环境中输入以下内容:

第一次存入一个值,变量就被“初始化”(或创建)❶。此后,可以在表达式中使用它,以及其他变量和值❷。如果变量被赋了一个新值,老值就被忘记了❸。这就是为什么在例子结束时,spam求值为42,而不是40。这称为“覆写”该变量。在交互式环境中输入以下代码,尝试覆写一个字符串:

就像图1-3中的盒子,这个例子中的spam变量保存了’Hello',直到你用’Goodbye'替代它。图1-3 如果一个新值赋给变量,老值就被遗忘了1.4.2 变量名

表1-3中有一些合法变量名的例子。你可以给变量取任何名字,只要它遵守以下3条规则:

1.只能是一个词。

2.只能包含字母、数字和下划线。

3.不能以数字开头。表1-3 有效和无效的变量名

变量名是区分大小写的。这意味着,spam、SPAM、Spam和sPaM是4个不同的变量。变量用小写字母开头是Python的惯例。

本书的变量名使用了驼峰形式,没有用下划线。也就是说,变量名用lookLikeThis,而不是looking_like_this。一些有经验的程序员可能会指出,官方的Python代码风格PEP 8,即应该使用下划线。我喜欢驼峰式,这没有错,并认为PEP 8本身“愚蠢的一致性是头脑狭隘人士的心魔”:“一致地满足风格指南是重要的。但最重要的是,知道何时要不一致,因为有时候风格指南就是不适用。如果有怀疑,请相信自己的最佳判断。”

好的变量名描述了它包含的数据。设想你搬到一间新屋子,搬家纸箱上标的都是“东西”。你永远找不到任何东西!本书的例子和许多Python的文档,使用spam、eggs和bacon等变量名作为一般名称

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载