本书采用简单直白的语言、生动的比喻,循循善诱、深入浅出地介绍了Python的基本知识和有关应用方式。第1~第8章介绍了Python的基础知识,内容包括Python简介、Python的下载与安装、Python自带开发工具IDLE的使用、编程有关专业词汇和概念、Python中的基本数据类型、Python中的流程控制、Python的函数与模块;第9~第16章介绍了编程的进阶知识,内容包括面向对象编程、文件操作、数据库操作、错误与异常处理、测试与调试、GUI图形界面编程、并发编程、网络编程等;第17~第20章通过4个综合案例讲解Python的实战应用;第21章介绍了专业开发环境Pycharm的使用。
专为零基础入门读者打造,中学生、文科生也能轻松掌握
语言通俗幽默,案例贴近生活,努力贴在地上“接地气”
附赠23小时语音教学视频和大量案例代码资源,作者“在线等”答疑
前 言
年轻人是幸运的,一出生就有很多先进的技术和产品可以使用。然而笔者年龄稍大,所以几乎完整经历了国内互联网技术的发展变革,当然这也是一种财富,比如笔者在中学时代还要靠调制解调器拨号上网,而如今都是百兆、千兆光纤宽带上网。上大学时第一部手机还是只能打电话发短信的黑白小屏手机,而如今我们用的都是4G、5G智能上网手机,除了打电话发短信,还可以用手机上网、看电影、订票、订餐、直播等。社会日新月异,科技飞速发展,终于,人工智能的时代来临了。近几年,谷歌的人工智能围棋程序AlphaGo接连战胜了世界级围棋冠军李世石,又战胜了当今世界围棋排名第一的柯洁,开启了人工智能全面进军日常生活的大幕。
科技产品的更新迭代,本质是技术的更新迭代。笔者还记得在中学时面对一个黑白屏电脑的DOS界面打字的情景,那时候我们学习的是BASIC语言,后来大学时用的是Windows98系统,学习的是C语言。而如今,我们使用的都是功能多样化、智能化的操作系统,编程语言也经历了飞速的发展,比如Python已经出现近20年了,主版本也已经更新到3.7版本,功能越来越强大,应用越来越广泛,特别是在人工智能领域,Python更是如鱼得水。比如我们前面提到的AlphaGo,也用到了Python的有关技术。当然,Python的用途还不止于人工智能,在大数据、云计算等方面也有广泛应用。而人工智能、区块链,这些名词在如今的媒体上经常见到,即使你学习的不是理工专业,做的不是技术类工作,想必对这些词汇也耳熟能详。
如今我们国家非常重视人工智能等技术的发展,在国家级的会议上也多次提到要大力发展人工智能技术、区块链技术,希望在世界互联网竞争新赛道上占据有利位置。而Python正是人工智能时代主流的语言,甚至在中小学,已经将Python列入计算机课程的范围。如果你稍加留意也会发现,如今在各类编程语言排行榜上,Python也常常出现在第一名的位置上,市场份额也逐年提升。或许也正因为如此,你选择要学习Python编程。毕竟,就连五十多岁的某房地产大佬也在微博上宣称:“今天开始我学习一门新的语言Python,我在寻找。这也是今天给自己人生的礼物。 ”足见Python的魅力。
当然,学习编程并不是一蹴而就的,尤其是对于零基础的人来说。不过好在Python本身就是一门门槛较低的编程语言,非常适合零基础的朋友作为入门语言,而且Python的功能也非常强大。不过即便如此,学习这门技术也需要有一个科学、系统的指引。本书是一本非常适合初学者学习参考的书籍。笔者将近年来对于Python的学习和研究进行了总结,并回顾多年来自己对于各种新技术和其他几种编程语言的学习过程,结合自身的编程工作经验,编写了本书,并配套制作了教学视频(大家可以通过关注笔者的微信公众号“春天杰作”并回复关键字“Python”获取下载地址)。本书内容不但有编程知识,而且有学习方法,再加上通俗易懂的表述,相信一定能够为你的Python之路助一臂之力。
限于水平和篇幅,本书仍有不足之处,敬请谅解。在这个即时互动的时代,笔者也愿意通过网络为读者解答各类问题。读者朋友可以关注笔者运营的Python自媒体微博(@Python)获取更多学习资料,或者通过笔者个人微博(@春天杰作)个人微信公众号(“春天杰作”)与笔者联系。愿我们成为朋友。
最后,赶紧开始吧!
作者
2020年4月
王春杰,技术博主(微博@Python),网络作家(笔名“春天杰作”),微博签约自媒体人。拥有十余年Web开发、网络推广等互联网行业经验,熟悉Python、C、PHP等编程语言技术。曾在教育培训机构工作多年,目前创业中,主要从事网络与软件开发、自媒体运营,以及Python编程技术的推广和培训等工作。
目 录
第1章 人生苦短,我用Python!——Python简介
1.1 英明的决定 1
1.2 做一点准备 7
1.2.1 安装Python就这么简单 7
1.2.2 工欲善其事,IDLE 11
1.3 终于要开始写代码了,好嗨哟! 12
1.3.1 第一个Python程序:Hello world! 13
1.3.2 举一反三:随便Hello点啥 15
第2章 热身运动——了解一些基本概念
2.1 来点儿变化:变量 17
2.1.1 变量的赋值与使用 18
2.1.2 变量命名规则 20
2.1.3 Python中的变量只是一个标签 21
2.2 互动起来:输出与输入 23
2.2.1 内置函数简介 23
2.2.2 输出print() 24
2.2.3 输入input() 26
2.3 无规矩不成方圆:注释与编码规则 27
2.3.1 注释 27
2.3.2 缩进与空行 31
2.3.3 参考PEP8 32
2.4 物以类聚:Python数据类型简介 34
2.4.1 六种基本数据类型简介 34
2.4.2 数据类型的判断 35
2.4.3 容器、序列、迭代、可迭代对象 36
2.4.4 布尔值 37
第3章 数字和数学并不可怕——数据类型之数字
3.1 数字虽多,不过三类 39
3.1.1 整数 39
3.1.2 浮点数 41
3.1.3 复数 41
3.1.4 eval()函数与exec()函数 42
3.1.5 进制与进制转换 43
3.2 小学数学都学过——运算符与表达式 44
3.2.1 算数运算符 45
3.2.2 比较运算符 46
3.2.3 赋值运算符 47
3.2.4 逻辑运算符 48
3.2.5 各种运算符的混合使用与优先级 48
3.3 再也不用怕数学了:数学函数与math模块 49
3.3.1 数学函数 49
3.3.2 math模块 50
3.3.3 random模块 53
3.3.4 案例:做一个机选彩票的程序 54
第4章 字符串也是一种“串儿”——数据类型之字符串
4.1 字符串是一种什么串儿? 55
4.1.1 字符串的三种形式 55
4.1.2 字符串的索引 58
4.1.3 字符串的判断 59
4.1.4 转义字符与原始字符串 60
4.2 字符串的N种“食用方法” 62
4.2.1 字符串的切片 62
4.2.2 字符串的运算 64
4.2.3 处理字符串的有关函数 67
4.2.4 字符串的有关方法 68
4.2.5 字符串的格式化输出 71
4.3 正则表达式 71
4.3.1 正则表达式基础 72
4.3.2 正则表达式的应用 73
4.3.3 re模块 75
4.3.4 案例:验证手机号是否合法 77
第5章 让程序更听话——流程控制与if分支
5.1 送你一根指挥棒:流程控制简介 78
5.2 随机应变:if分支 80
5.2.1 if分支的几种结构 80
5.2.2 if结构的嵌套 84
5.2.3 多个if与多个elif的区别 86
5.2.4 pass语句 87
第6章 一句顶一万句——循环
6.1 初学编程我写了一万行代码,后来我学会了用循环 90
6.1.1 for循环结构 90
6.1.2 range()函数 92
6.1.3 break与continue 93
6.1.4 使用for循环遍历列表和字典 94
6.1.5 for循环嵌套 94
6.2 更“聪明”的while循环 95
6.2.1 while循环结构 95
6.2.2 while循环与else配合使用 97
6.2.3 在while循环中使用break 98
6.2.4 在while循环中使用continue 98
6.2.5 小心死循环 99
6.2.6 while循环嵌套 100
6.2.7 用while循环实现一个猜数字游戏 101
6.2.8 while循环和for循环混合使用 102
6.2.9 while循环与for循环之比较 103
第7章 我们也是有组织的——列表、元组、集合、字典
7.1 列车就是一列车,列表就是一列表 104
7.1.1 创建列表 104
7.1.2 列表的索引 105
7.1.3 列表的切片 105
7.1.4 列表的遍历 106
7.1.5 列表元素的修改、插入与删除 106
7.1.6 列表的复制 107
7.1.7 列表元素的判断 108
7.1.8 列表的嵌套 109
7.1.9 二维列表的遍历 110
7.1.10 列表的运算 110
7.1.11 操作列表的有关函数 111
7.1.12 列表的有关方法 112
7.1.13 列表解析式与生成器表达式 114
7.2 比列表“顽固”的元组 115
7.2.1 元组的创建 116
7.2.2 元组的索引、切片、删除、复制、遍历 116
7.2.3 元组的运算与判断 117
7.2.4 操作元组的有关函数 118
7.2.5 元组的有关方法 119
7.2.6 二维元组 120
7.3 字典,就像你用过的字典 120
7.3.1 字典的创建 121
7.3.2 字典元素的访问 121
7.3.3 字典元素的修改、添加与删除 122
7.3.4 字典的遍历 123
7.3.5 字典的嵌套与二维字典 124
7.3.6 操作字典的有关函数 125
7.3.7 字典的有关方法 126
7.3.8 深复制与浅复制 127
7.3.9 用字典实现多重分支 128
7.4 集合:搞搞关系 129
7.4.1 集合的创建 129
7.4.2 集合的遍历、判断与删除 129
7.4.3 集合的关系判断和运算 130
7.4.4 操作集合的有关函数 131
7.4.5 集合的有关方法 132
第8章 掌握核心科技——函数与模块
8.1 自制工具:自定义函数 135
8.1.1 函数的定义与调用 135
8.1.2 形参、实参、位置参数、关键字参数 136
8.1.3 参数的默认值 137
8.1.4 传递多个参数 138
8.1.5 传递列表或字典作为参数 139
8.1.6 函数的返回值 140
8.1.7 用函数实现一个猜数字游戏 140
8.1.8 变量的作用域 141
8.1.9 函数的嵌套 142
8.1.10 递归函数 143
8.1.11 匿名函数:lambda表达式 145
8.1.12 高阶函数:map()、filter() 145
8.1.13 闭包 146
8.1.14 装饰器 147
8.2 工具箱:模块 149
8.2.1 将自定义函数存储为模块 149
8.2.2 模块的导入与使用 150
8.2.3 if__name__==\"__main__\": 152
第9章 单身狗的渴望——面向对象编程
9.1 物以类聚,人以群分 154
9.1.1 创建一个类 154
9.1.2 实例化一个对象 156
9.1.3 访问、修改类和对象的属性与方法 157
9.1.4 封装:私有属性和私有方法 159
9.1.5 继承:祖传秘方 161
9.1.6 多继承与多重继承 163
9.1.7 多态:各自表述 165
9.1.8 将类存储为模块 166
9.1.9 类模块的使用 167
9.2 模块、包、库,傻傻分不清楚? 167
9.2.1 包的创建与使用 167
9.2.2 模块、包、库的区别 168
9.2.3 Python标准库 169
9.3 给各种包找个管家:pip 169
9.3.1 pip的使用环境 169
9.3.2 包的安装与升级 170
9.3.3 包的查询与卸载 171
第10章 让鼠标休息一会儿——文件操作
10.1 文件读写 173
10.1.1 文件的打开、读取与关闭 173
10.1.2 文件的逐行读取与部分读取 174
10.1.3 查看指针位置与修改指针位置 176
10.1.4 写入文件内容 177
10.2 os模块 178
10.2.1 目录操作 179
10.2.2 文件操作 180
10.2.3 Linux系统下的权限操作 183
10.3 shutil模块 183
第11章 让我们一起囤积数据吧——数据库操作
11.1 数据库 187
11.1.1 数据库简介 187
11.1.2 SQL语句简介 189
11.1.3 DB-API简介 191
11.2 Python操作SQLite数据库 194
11.2.1 sqlite3模块的使用 194
11.2.2 数据表的创建、改名与数据的添加 195
11.2.3 数据的查询、修改与删除 197
11.2.4 查看表信息与删除表 199
11.3 Python操作MySQL数据库 202
11.3.1 下载安装MySQL 202
11.3.2 使用mysql.connector模块操作MySQL数据库 211
第12章 人非圣贤,孰能无过——错误与异常处理
12.1 错误与异常 215
12.1.1 错误与常见错误 215
12.1.2 异常类 218
12.2 异常处理 220
12.2.1 异常的获取与处理 221
12.2.2 使用raise语句自主抛出异常 223
12.2.3 使用自定义异常类 224
第13章 是骡子是马拉出来遛遛——调试与测试
13.1 调试 226
13.1.1 简单的调试方法 226
13.1.2 IDLE自带调试工具的使用 228
13.2 测试 233
13.2.1 单元测试与测试用例 233
13.2.2 unittest模块的使用 234
第14章 程序也要面子——GUI编程
14.1 GUI简介 237
14.2 Python内置GUI模块:Tkinter 238
14.2.1 使用Tkinter模块创建一个界面程序 238
14.2.2 窗口、控件、事件、事件处理函数 239
14.2.3 控件布局方式 248
14.3 案例:图形版猜数字游戏 255
第15章 人多力量大——并发编程
15.1 进程与线程 257
15.1.1 并发与并行 257
15.1.2 多进程与多线程 258
15.1.3 同步、异步、阻塞、非阻塞 259
15.2 多进程的使用 260
15.2.1 创建和调用子进程 261
15.2.2 通过继承Process类来创建多个进程 263
15.2.3 通过进程池Pool来创建多进程 263
15.2.4 进程间通信 265
15.3 多线程的使用 266
15.3.1 使用treading模块创建多线程 266
15.3.2 通过实例化Thread类来创建线程 267
15.3.3 线程池 267
15.3.4 线程间通信 268
15.3.5 线程安全 269
第16章 三天打鱼 天天上网——网络编程
16.1 网络基础 270
16.1.1 网络的硬件基础 270
16.1.2 网络模型 271
16.1.3 网络协议 272
16.1.4 域名、DNS、URL 273
16.1.5 客户端与服务器 274
16.1.6 Socket与socket模块 274
16.2 Web入门 276
16.2.1 超文本与超链接 276
16.2.2 超文本标记语言:HTML 277
16.2.3 HTTP请求 280
16.3 网络模块:urllib 281
16.3.1 request模块 281
16.3.2 error模块 283
16.3.3 parse模块 284
16.3.4 robotparser模块 285
第17章 实战项目一:让Python当你的工作助手
17.1 批量处理图片 287
17.1.1 pillow库简介 287
17.1.2 案例:批量调整图片大小 290
17.2 读写Word文档 293
17.2.1 python-docx库简介 293
17.2.2 文档写入操作 294
17.2.3 文档合并操作 297
17.3 处理Excel 299
17.3.1 openpyxl库 299
17.3.2 操作Excel表格 300
第18章 实战项目二:这个虫子有点牛——网络爬虫开发
18.1 网络爬虫简介 303
18.1.1 网络爬虫基本原理 303
18.1.2 网络爬虫的“规矩”——Robots协议 304
18.2 requests库 305
18.2.1 requests库的常用方法 306
18.2.2 用requests库爬取一个简单网页 307
18.3实战:爬取百度图片 310
第19章 实战项目三:你的游戏你做主——小游戏开发
19.1 Pygame库 318
19.1.1 Pygame库简介 318
19.1.2 Display模块 321
19.1.3 Surface模块 322
19.1.4 图形对象的常用方法 326
19.2 案例:制作一个贪吃蛇游戏 327
第20章 实战项目四:确认过眼神,我遇见对的人——AI人脸识别
20.1 人工智能简介 334
20.2 开放平台与API接口 336
20.3 案例:一个人脸识别与打分项目——Python看脸 340
20.3.1 Access Token 340
20.3.2 Base64编码 341
20.3.3 json数据格式 344
20.3.4 案例:Python看脸 345
第21章 工欲善其事,换个IDE?——PyCharm
21.1 PyCharm 349
21.1.1 PyCharm下载与安装 349
21.1.2 第一次使用PyCharm 354
21.2 用PyCharm写一个聊天程序 363