版权声明

    对本书前两版的赞誉

    推荐语

    献辞

    第 3 版修订说明

    中文版审读致谢

    前言

    读者对象

    本书内容

    在线资源

    配套视频

    补充材料

    为何使用 Python

    致谢

    第一部分 基础知识

    第 1 章 起步

    1.1 编程环境简介

    1.1.1 Python 版本

    1.1.2 运行 Python 代码片段

    1.1.3 编辑器 VS Code 简介

    1.2 在各种操作系统中搭建 Python 编程环境

    1.2.1 在 Windows 系统中搭建 Python 编程环境

    1.2.2 在 macOS 系统中搭建 Python 编程环境

    1.2.3 在 Linux 系统中搭建 Python 编程环境

    1.3 运行 Hello World 程序

    1.3.1 给 VS Code 安装 Python 扩展

    1.3.2 运行程序 hello_world.py

    1.4 排除安装问题

    1.5 从终端运行 Python 程序

    1.5.1 在 Windows 系统中从终端运行 Python 程序

    1.5.2 在 Linux 和 macOS 系统中从终端运行 Python 程序

    1.6 小结

    第 2 章 变量和简单的数据类型

    2.1 运行 hello_world.py 时发生的情况

    2.2 变量

    2.2.1 变量的命名和使用

    2.2.2 如何在使用变量时避免命名错误

    2.2.3 变量是标签

    2.3 字符串

    2.3.1 使用方法修改字符串的大小写

    2.3.2 在字符串中使用变量

    2.3.3 使用制表符或换行符来添加空白

    2.3.4 删除空白

    2.3.5 删除前缀

    2.3.6 如何在使用字符串时避免语法错误

    2.4 数

    2.4.1 整数

    2.4.2 浮点数

    2.4.3 整数和浮点数

    2.4.4 数中的下划线

    2.4.5 同时给多个变量赋值

    2.4.6 常量

    2.5 注释

    2.5.1 如何编写注释

    2.5.2 该编写什么样的注释

    2.6 Python 之禅

    2.7 小结

    第 3 章 列表简介

    3.1 列表是什么

    3.1.1 访问列表元素

    3.1.2 索引从 0 而不是 1 开始

    3.1.3 使用列表中的各个值

    3.2 修改、添加和删除元素

    3.2.1 修改列表元素

    3.2.2 在列表中添加元素

    3.2.3 从列表中删除元素

    3.3 管理列表

    3.3.1 使用 sort() 方法对列表进行永久排序

    3.3.2 使用 sorted() 函数对列表进行临时排序

    3.3.3 反向打印列表

    3.3.4 确定列表的长度

    3.4 使用列表时避免索引错误

    3.5 小结

    第 4 章 操作列表

    4.1 遍历整个列表

    4.1.1 深入研究循环

    4.1.2 在 for 循环中执行更多的操作

    4.1.3 在 for 循环结束后执行一些操作

    4.2 避免缩进错误

    4.2.1 忘记缩进

    4.2.2 忘记缩进额外的代码行

    4.2.3 不必要的缩进

    4.2.4 循环后不必要的缩进

    4.2.5 遗漏冒号

    4.3 创建数值列表

    4.3.1 使用 range() 函数

    4.3.2 使用 range() 创建数值列表

    4.3.3 对数值列表执行简单的统计计算

    4.3.4 列表推导式

    4.4 使用列表的一部分

    4.4.1 切片

    4.4.2 遍历切片

    4.4.3 复制列表

    4.5 元组

    4.5.1 定义元组

    4.5.2 遍历元组中的所有值

    4.5.3 修改元组变量

    4.6 设置代码格式

    4.6.1 格式设置指南

    4.6.2 缩进

    4.6.3 行长

    4.6.4 空行

    4.6.5 其他格式设置指南

    4.7 小结

    第 5 章 if 语句

    5.1 一个简单的示例

    5.2 条件测试

    5.2.1 检查是否相等

    5.2.2 如何在检查是否相等时忽略大小写

    5.2.3 检查是否不等

    5.2.4 数值比较

    5.2.5 检查多个条件

    5.2.6 检查特定的值是否在列表中

    5.2.7 检查特定的值是否不在列表中

    5.2.8 布尔表达式

    5.3 if 语句

    5.3.1 简单的 if 语句

    5.3.2 if-else 语句

    5.3.3 if-elif-else 语句

    5.3.4 使用多个 elif 代码块

    5.3.5 省略 else 代码块

    5.3.6 测试多个条件

    5.4 使用 if 语句处理列表

    5.4.1 检查特殊元素

    5.4.2 确定列表非空

    5.4.3 使用多个列表

    5.5 设置 if 语句的格式

    5.6 小结

    第 6 章 字典

    6.1 一个简单的字典

    6.2 使用字典

    6.2.1 访问字典中的值

    6.2.2 添加键值对

    6.2.3 从创建一个空字典开始

    6.2.4 修改字典中的值

    6.2.5 删除键值对

    6.2.6 由类似的对象组成的字典

    6.2.7 使用 get() 来访问值

    6.3 遍历字典

    6.3.1 遍历所有的键值对

    6.3.2 遍历字典中的所有键

    6.3.3 按特定的顺序遍历字典中的所有键

    6.3.4 遍历字典中的所有值

    6.4 嵌套

    6.4.1 字典列表

    6.4.2 在字典中存储列表

    6.4.3 在字典中存储字典

    6.5 小结

    第 7 章 用户输入和 while 循环

    7.1 input() 函数的工作原理

    7.1.1 编写清晰的提示

    7.1.2 使用 int() 来获取数值输入

    7.1.3 求模运算符

    7.2 while 循环简介

    7.2.1 使用 while 循环

    7.2.2 让用户选择何时退出

    7.2.3 使用标志

    7.2.4 使用 break 退出循环

    7.2.5 在循环中使用 continue

    7.2.6 避免无限循环

    7.3 使用 while 循环处理列表和字典

    7.3.1 在列表之间移动元素

    7.3.2 删除为特定值的所有列表元素

    7.3.3 使用用户输入填充字典

    7.4 小结

    第 8 章 函数

    8.1 定义函数

    8.1.1 向函数传递信息

    8.1.2 实参和形参

    8.2 传递实参

    8.2.1 位置实参

    8.2.2 关键字实参

    8.2.3 默认值

    8.2.4 等效的函数调用

    8.2.5 避免实参错误

    8.3 返回值

    8.3.1 返回简单的值

    8.3.2 让实参变成可选的

    8.3.3 返回字典

    8.3.4 结合使用函数和 while 循环

    8.4 传递列表

    8.4.1 在函数中修改列表

    8.4.2 禁止函数修改列表

    8.5 传递任意数量的实参

    8.5.1 结合使用位置实参和任意数量的实参

    8.5.2 使用任意数量的关键字实参

    8.6 将函数存储在模块中

    8.6.1 导入整个模块

    8.6.2 导入特定的函数

    8.6.3 使用 as 给函数指定别名

    8.6.4 使用 as 给模块指定别名

    8.6.5 导入模块中的所有函数

    8.7 函数编写指南

    8.8 小结

    第 9 章 类

    9.1 创建和使用类

    9.1.1 创建 Dog

    9.1.2 根据类创建实例

    9.2 使用类和实例

    9.2.1 Car

    9.2.2 给属性指定默认值

    9.2.3 修改属性的值

    9.3 继承

    9.3.1 子类的 init() 方法

    9.3.2 给子类定义属性和方法

    9.3.3 重写父类中的方法

    9.3.4 将实例用作属性

    9.3.5 模拟实物

    9.4 导入类

    9.4.1 导入单个类

    9.4.2 在一个模块中存储多个类

    9.4.3 从一个模块中导入多个类

    9.4.4 导入整个模块

    9.4.5 导入模块中的所有类

    9.4.6 在一个模块中导入另一个模块

    9.4.7 使用别名

    9.4.8 找到合适的工作流程

    9.5 Python 标准库

    9.6 类的编程风格

    9.7 小结

    第 10 章 文件和异常

    10.1 读取文件

    10.1.1 读取文件的全部内容

    10.1.2 相对文件路径和绝对文件路径

    10.1.3 访问文件中的各行

    10.1.4 使用文件的内容

    10.1.5 包含 100 万位的大型文件

    10.1.6 圆周率值中包含你的生日吗

    10.2 写入文件

    10.2.1 写入一行

    10.2.2 写入多行

    10.3 异常

    10.3.1 处理 ZeroDivisionError 异常

    10.3.2 使用 try-except 代码块

    10.3.3 使用异常避免崩溃

    10.3.4 else 代码块

    10.3.5 处理 FileNotFoundError 异常

    10.3.6 分析文本

    10.3.7 使用多个文件

    10.3.8 静默失败

    10.3.9 决定报告哪些错误

    10.4 存储数据

    10.4.1 使用 json.dumps()json.loads()

    10.4.2 保存和读取用户生成的数据

    10.4.3 重构

    10.5 小结

    第 11 章 测试代码

    11.1 使用 pip 安装 pytest

    11.1.1 更新 pip

    11.1.2 安装 pytest

    11.2 测试函数

    11.2.1 单元测试和测试用例

    11.2.2 可通过的测试

    11.2.3 运行测试

    11.2.4 未通过的测试

    11.2.5 在测试未通过时怎么办

    11.2.6 添加新测试

    11.3 测试类

    11.3.1 各种断言

    11.3.2 一个要测试的类

    11.3.3 测试 AnonymousSurvey

    11.3.4 使用夹具

    11.4 小结

    第二部分 项目

    项目 1 外星人入侵

    第 12 章 武装飞船

    12.1 规划项目

    12.2 安装 Pygame

    12.3 开始游戏项目

    12.3.1 创建 Pygame 窗口及响应用户输入

    12.3.2 控制帧率

    12.3.3 设置背景色

    12.3.4 创建 Settings

    12.4 添加飞船图像

    12.4.1 创建 Ship

    12.4.2 在屏幕上绘制飞船

    12.5 重构:checkevents() 方法和 updatescreen() 方法

    12.5.1 checkevents() 方法

    12.5.2 updatescreen() 方法

    12.6 驾驶飞船

    12.6.1 响应按键

    12.6.2 允许持续移动

    12.6.3 左右移动

    12.6.4 调整飞船的速度

    12.6.5 限制飞船的活动范围

    12.6.6 重构 checkevents()

    12.6.7 按 Q 键退出

    12.6.8 在全屏模式下运行游戏

    12.7 简单回顾

    12.7.1 alien_invasion.py

    12.7.2 settings.py

    12.7.3 ship.py

    12.8 射击

    12.8.1 添加子弹设置

    12.8.2 创建 Bullet

    12.8.3 将子弹存储到编组中

    12.8.4 开火

    12.8.5 删除已消失的子弹

    12.8.6 限制子弹数量

    12.8.7 创建 updatebullets() 方法

    12.9 小结

    第 13 章 外星人

    13.1 项目回顾

    13.2 创建第一个外星人

    13.2.1 创建 Alien

    13.2.2 创建 Alien 实例

    13.3 创建外星舰队

    13.3.1 创建一行外星人

    13.3.2 重构 createfleet()

    13.3.3 添加多行外星人

    13.4 让外星舰队移动

    13.4.1 向右移动外星舰队

    13.4.2 创建表示外星舰队移动方向的设置

    13.4.3 检查外星人是否到达了屏幕边缘

    13.4.4 向下移动外星舰队并改变移动方向

    13.5 击落外星人

    13.5.1 检测子弹和外星人的碰撞

    13.5.2 为测试创建大子弹

    13.5.3 生成新的外星舰队

    13.5.4 加快子弹的速度

    13.5.5 重构 updatebullets()

    13.6 结束游戏

    13.6.1 检测外星人和飞船的碰撞

    13.6.2 响应外星人和飞船的碰撞

    13.6.3 有外星人到达屏幕下边缘

    13.6.4 游戏结束

    13.7 确定应运行游戏的哪些部分

    13.8 小结

    第 14 章 记分

    14.1 添加 Play 按钮

    14.1.1 创建 Button

    14.1.2 在屏幕上绘制按钮

    14.1.3 开始游戏

    14.1.4 重置游戏

    14.1.5 将 Play 按钮切换到非活动状态

    14.1.6 隐藏光标

    14.2 提高难度

    14.2.1 修改速度设置

    14.2.2 重置速度

    14.3 记分

    14.3.1 显示得分

    14.3.2 创建记分牌

    14.3.3 在外星人被击落时更新得分

    14.3.4 重置得分

    14.3.5 将每个被击落的外星人都计入得分

    14.3.6 提高分数

    14.3.7 对得分进行舍入

    14.3.8 最高分

    14.3.9 显示等级

    14.3.10 显示余下的飞船数

    14.4 小结

    项目 2 数据可视化

    第 15 章 生成数据

    15.1 安装 Matplotlib

    15.2 绘制简单的折线图

    15.2.1 修改标签文字和线条粗细

    15.2.2 校正绘图

    15.2.3 使用内置样式

    15.2.4 使用 scatter() 绘制散点图并设置样式

    15.2.5 使用 scatter() 绘制一系列点

    15.2.6 自动计算数据

    15.2.7 定制刻度标记

    15.2.8 定制颜色

    15.2.9 使用颜色映射

    15.2.10 自动保存绘图

    15.3 随机游走

    15.3.1 创建 RandomWalk

    15.3.2 选择方向

    15.3.3 绘制随机游走图

    15.3.4 模拟多次随机游走

    15.3.5 设置随机游走图的样式

    15.4 使用 Plotly 模拟掷骰子

    15.4.1 安装 Plotly

    15.4.2 创建 Die

    15.4.3 掷骰子

    15.4.4 分析结果

    15.4.5 绘制直方图

    15.4.6 定制绘图

    15.4.7 同时掷两个骰子

    15.4.8 进一步定制

    15.4.9 同时掷两个面数不同的骰子

    15.4.10 保存图形

    15.5 小结

    第 16 章 下载数据

    16.1 CSV 文件格式

    16.1.1 解析 CSV 文件头

    16.1.2 打印文件头及其位置

    16.1.3 提取并读取数据

    16.1.4 绘制温度图

    16.1.5 datetime 模块

    16.1.6 在图中添加日期

    16.1.7 涵盖更长的时间

    16.1.8 再绘制一个数据系列

    16.1.9 给图中区域着色

    16.1.10 错误检查

    16.2 制作全球地震散点图:GeoJSON 格式

    16.2.1 地震数据

    16.2.2 查看 GeoJSON 数据

    16.2.3 创建地震列表

    16.2.4 提取震级

    16.2.5 提取位置数据

    16.2.6 绘制地震散点图

    16.2.7 指定数据的另一种方式

    16.2.8 定制标记的尺寸

    16.2.9 定制标记的颜色

    16.2.10 其他渐变

    16.2.11 添加悬停文本

    16.3 小结

    第 17 章 使用 API

    17.1 使用 API

    17.1.1 Git 和 GitHub

    17.1.2 使用 API 调用请求数据

    17.1.3 安装 Requests

    17.1.4 处理 API 响应

    17.1.5 处理响应字典

    17.1.6 概述最受欢迎的仓库

    17.1.7 监控 API 的速率限制

    17.2 使用 Plotly 可视化仓库

    17.2.1 设置图形的样式

    17.2.2 添加定制工具提示

    17.2.3 添加可单击的链接

    17.2.4 定制标记颜色

    17.2.5 深入了解 Plotly 和 GitHub API

    17.3 Hacker News API

    17.4 小结

    项目 3 Web 应用程序

    第 18 章 Django 入门

    18.1 建立项目

    18.1.1 制定规范

    18.1.2 建立虚拟环境

    18.1.3 激活虚拟环境

    18.1.4 安装 Django

    18.1.5 在 Django 中创建项目

    18.1.6 创建数据库

    18.1.7 查看项目

    18.2 创建应用程序

    18.2.1 定义模型

    18.2.2 激活模型

    18.2.3 Django 管理网站

    18.2.4 定义模型 Entry

    18.2.5 迁移模型 Entry

    18.2.6 向管理网站注册 Entry

    18.2.7 Django shell

    18.3 创建网页:学习笔记主页

    18.3.1 映射 URL

    18.3.2 编写视图

    18.3.3 编写模板

    18.4 创建其他网页

    18.4.1 模板继承

    18.4.2 显示所有主题的页面

    18.4.3 显示特定主题的页面

    18.5 小结

    第 19 章 用户账户

    19.1 让用户能够输入数据

    19.1.1 添加新主题

    19.1.2 添加新条目

    19.1.3 编辑条目

    19.2 创建用户账户

    19.2.1 应用程序 accounts

    19.2.2 将应用程序 accounts 添加到 settings.py 中

    19.2.3 包含应用程序 accounts 的 URL

    19.2.4 登录页面

    19.2.5 注销

    19.2.6 注册页面

    19.3 让用户拥有自己的数据

    19.3.1 使用 @login_required 限制访问

    19.3.2 将数据关联到用户

    19.3.3 只允许用户访问自己的主题

    19.3.4 保护用户的主题

    19.3.5 保护页面 edit_entry

    19.3.6 将新主题关联到当前用户

    19.4 小结

    第 20 章 设置应用程序的样式并部署

    20.1 设置项目“学习笔记”的样式

    20.1.1 应用程序 django-bootstrap5

    20.1.2 使用 Bootstrap 设置项目“学习笔记”的样式

    20.1.3 修改 base.html

    20.1.4 使用 jumbotron 设置主页的样式

    20.1.5 设置登录页面的样式

    20.1.6 设置页面 topics 的样式

    20.1.7 设置页面 topic 中条目的样式

    20.2 部署“学习笔记”

    20.2.1 注册 Platform.sh 账户

    20.2.2 安装 Platform.sh CLI

    20.2.3 安装 platformshconfig

    20.2.4 创建文件 requirements.txt

    20.2.5 其他部署需求

    20.2.6 添加配置文件

    20.2.7 为部署到 Platform.sh 而修改 settings.py

    20.2.8 使用 Git 跟踪项目文件

    20.2.9 在 Platform.sh 上创建项目

    20.2.10 推送到 Platform.sh

    20.2.11 查看线上项目

    20.2.12 改进 Platform.sh 部署

    20.2.13 创建定制错误页面

    20.2.14 继续开发

    20.2.15 将项目从 Platform.sh 上删除

    20.3 小结

    附录 A 安装及故障排除

    A.1 Windows 系统

    A.1.1 用 py 代替 python

    A.1.2 重新运行安装程序

    A.2 macOS 系统

    A.2.1 不小心安装了 Apple 提供的 Python 版本

    A.2.2 较旧 macOS 系统中的 Python 2

    A.3 Linux 系统

    A.3.1 使用默认安装的 Python

    A.3.2 安装最新的 Python 版本

    A.4 检查使用的是哪个版本

    A.5 Python 关键字和内置函数

    A.5.1 Python 关键字

    A.5.2 Python 内置函数

    附录 B 文本编辑器和 IDE

    B.1 高效地使用 VS Code

    B.1.1 配置 VS Code

    B.1.2 VS Code 快捷键

    B.2 其他文本编辑器和 IDE

    B.2.1 IDLE

    B.2.2 Geany

    B.2.3 Sublime Text

    B.2.4 Emacs 和 Vim

    B.2.5 PyCharm

    B.2.6 Jupyter Notebook

    附录 C 寻求帮助

    C.1 第一步

    C.1.1 再试试

    C.1.2 歇一会儿

    C.1.3 参考本书的在线资源

    C.2 在线搜索

    C.2.1 Stack Overflow

    C.2.2 Python 官方文档

    C.2.3 库官方文档

    C.2.4 r/learnpython

    C.2.5 博客

    C.3 Discord

    C.4 Slack

    附录 D 使用 Git 进行版本控制

    D.1 安装 Git

    配置 Git

    D.2 创建项目

    D.3 忽略文件

    D.4 初始化仓库

    D.5 检查状态

    D.6 将文件加入仓库

    D.7 执行提交

    D.8 查看提交历史

    D.9 第二次提交

    D.10 放弃修改

    D.11 检出以前的提交

    D.12 删除仓库

    附录 E 部署故障排除

    E.1 理解部署

    E.2 故障排除基础

    E.2.1 按屏幕上的建议做

    E.2.2 阅读日志输出

    E.3 随操作系统而异的故障排除技巧

    E.3.1 从 Windows 系统部署

    E.3.2 从 macOS 系统部署

    E.3.3 从 Linux 系统部署

    E.4 其他部署方法