本书是一部零基础、高标准,大广度、重实践的Python编程从入门到熟练的教材。本书覆盖面非常广,包括计算机基础常识、Python语言的基本要素、基本运算和条件分支语句、循环语句、函数、递归、复杂数据类型、计算思维、文件读写、正则表达式、玩转Python生态、数据分析和可视化、网络爬虫、面向对象程序设计入门、tkinter图形界面程序设计等内容。正则表达式、网络爬虫、图形界面等都是其他大多数Python基础教材不涉及的内容。对Python第三方库的使用,讲述尤其全面,涵盖数据分析库NumPy和pandas、数据库编程库SQLite3、图像处理库Pillow、Excel文档处理库OpenPyXL、统计绘图库Matplotlib、分词库Jieba等。还专门用一章的篇幅讲述计算思维,让读者了解计算的本质、时间复杂度、数据结构等概念。这些内容,都不是蜻蜓点水,而是深入浅出。
本书适合高等院校各专业学习Python使用。文、理、艺术等各类专业的零基础学生可以掌握并用到本书80%的内容;对编程有较高需求的理科生,可以进一步再多学15%;余下5%则基本是计算机专业学生才需要了解的。但即便是计算机专业的学生,也非常适合使用本书来快速掌握Python语法及各种库的使用。
本书配套电子资料十分齐全,包括程序源代码、重点难点讲解视频、课程讲义等,此外,作者在中国大学慕课开设的“实用Python程序设计”课程,提供了覆盖全书90%内容的视频讲解。
一、零基础。
本书对零基础学习者非常友好。除了内容从零开始,本书还特意指出了教学中收集的零基础学习者常犯的各种真实错误。有了本书遍布各处的“常见错误”提示。
二、高标准。
本书的大部分例题和习题,来自北京大学在线程序评测平台openjudge.cn,该平台包含两万多道编程题,程序提交后会自动评判对错。
以本书作为教材的教师,还可以在openjudge.cn上申请建立自己的教学组,自行利用平台上的题目或自己上传的题目,在平台上布置作业和考试。
三、大广度。
本书覆盖面非常广。除了基本的Python语法,还包括正则表达式、网络爬虫、图形界面等许多Python教材不涉及的内容。对Python第三方库的使用,更是比大多数教材介绍更多,涵盖数据分析库NumPy和pandas、数据库编程库sqlite3、图像处理库Pillow、Excel文档处理库openpyxl、统计绘图库Matplotlib、分词库jieba等。并且专门用一章的篇幅讲述计算思维,让读者了解计算的本质、时间复杂度、数据结构等概念。本书这些内容,都不是蜻蜓点水,而是深入浅出。
四、重实践。
本书非常适合非计算机专业人士使用。非计算机专业人士,工作中要用编程解决的问题,不外乎获取数据、分析数据、处理数据,并将数据分析和处理的结果展示出来。本书内容,一半打基础,另一半围绕数据的获取、分析、处理和展示这四点展开,具有极强的实用性。数学、中文、外语、经济、美术等各专业人士,能在书中找到贴合本专业的程序案例。若不在意对算法涉及较少,本书也非常适合计算机专业人士用来快速掌握Python语法及各种库的使用。
本书章节标题或者习题,带有\"*\"标记的,是较难内容,适用于理科读者,文科专业读者不需掌握;带有\"**\"标记的,则面向计算机专业读者,非计算机专业的读者不需掌握。
五、资源全
本书配套电子资料十分齐全,包括课程讲义以及170多个精心编写、风格简洁优美的程序源码、还有重点难点的讲解视频。作者在中国大学慕课开设的《实用Python程序设计》课程,提供了覆盖全书90%内容的视频讲解。书中重难点部分有二维码,扫码即可看相应讲解视频。
郭炜 北京大学信息学院教师,担任北京大学ACM国际大学生程序设计竞赛队教练多年,曾6次为ACM-ICPC亚洲区预选赛命题。 研究方向:计算机辅助教学,北京角斗士软件技术有限公司创始人,开发多款英语学习软件。
第1章 计算机基础常识
1.1 信息在计算机中的表示和存储 1
1.1.1 用0和1表示信息 1
1.1.2 二进制和十六进制 2
1.2 计算机程序设计语言 4
1.2.1 机器语言 4
1.2.2 汇编语言 5
1.2.3 高级语言 5
1.2.4 Python简史 6
1.3 习题 7
第2章 Python语言的基本要素
2.1 Python开发环境的搭建 8
2.2 Python的语句 9
2.3 注释 10
2.4 常量 11
2.5 变量 12
2.6 赋值语句 12
2.7 Python数据类型 14
2.8 字符串简介 14
2.8.1 字符串的基本概念 14
2.8.2 字符串的下标 15
2.8.3 连接字符串 15
2.8.4 用“in”“not in”判断子串 16
2.8.5 字符串和数值的转换 16
2.9 输入和输出 17
2.9.1 输出语句print 17
2.9.2 输入语句input 17
2.9.3 输出格式控制 19
2.10 列表简介 20
2.10.1 列表的基本概念 20
2.10.2 字符串分割成列表 20
2.11 常见语法错误排查 21
2.12 OpenJudge做题指南及例题讲解 21
2.13 习题 25
第3章 基本运算和条件分支语句
3.1 算术运算 26
3.2 关系运算和bool类型 28
3.3 逻辑运算 30
3.4 运算符的优先级 31
3.5 条件分支语句 32
3.6 条件分支语句例题 33
3.7 习题 40
第4章 循环语句
4.1 for循环语句 41
4.2 break语句和continue语句 45
4.3 多重循环 45
4.4 while循环语句 48
4.5 异常处理 51
4.6 循环综合例题 53
4.7 调试程序的方法 57
4.8 习题 58
第5章 函数
5.1 函数概述 59
5.2 全局变量和局部变量 62
★5.3 参数个数可变的函数 63
5.4 函数参数的默认值 64
5.5 Python的库函数 64
5.6 lambda表达式 65
★★5.7 高阶函数和闭包 66
★★★5.8 生成器 67
5.9 习题 69
第6章 递归
6.1 递归的基本概念 70
6.2 先做一步再递归:上台阶问题 72
★6.3 问题分解:汉诺塔问题 72
★★6.4 递归替代循环:N皇后问题 76
★6.5 递归绘制分形图案:绘制雪花曲线 78
6.6 习题 81
第7章 复杂数据类型
7.1 Python变量的指针本质 82
7.2 字符串详解 85
7.2.1 转义字符 85
7.2.2 三单引号和三双引号字符串 86
7.2.3 在字符串中使用编码代替字符 87
7.2.4 字符串的切片 88
7.2.5 字符串的分割 88
7.2.6 字符串的成员函数 89
7.2.7 字符串的格式化 91
7.2.8 f-string 92
7.3 元组 92
7.3.1 元组的基本概念 92
7.3.2 元组的操作 94
7.4 列表详解 95
7.4.1 列表基础用法 95
7.4.2 列表的成员函数 98
7.4.3 列表的排序 99
7.4.4 列表的映射和过滤 103
7.4.5 列表生成式 104
★7.4.6 二维列表 105
★7.4.7 列表的复制 107
7.4.8 列表、元组和字符串的互相转换 109
7.5 字典 109
7.5.1 字典的基本概念 109
7.5.2 字典的函数 111
7.5.3 字典例题:单词出现频率统计 112
7.6 集合 113
7.7 自定义数据类型:类 116
7.8 习题 118
第8章 计算思维
8.1 计算机的本质 121
8.2 计算机解决问题的基本方法—穷举 122
★8.3 程序或算法的时间复杂度 123
8.4 有序就能找得快 127
8.5 习题 128
第9章 文件读写
9.1 概述 129
9.2 文本文件的编码 130
9.3 读写文本文件 132
9.4 文件的相对路径和绝对路径 134
★9.5 文件夹的操作 135
★9.6 命令行参数 137
★9.7 文本文件处理综合实例 138
9.8 数据交换文件格式csv 141
★9.9 数据交换字符串格式JSON 142
★★★9.10 字节流和字符串的互相转换 143
★★★9.11 二进制文件的读写 144
9.12 习题 148
第10章 正则表达式
10.1 功能字符和字符组合 149
10.2 查找匹配的子串 153
10.3 边界符号 155
10.4 匹配选项 156
10.5 分组 157
10.6 '|' 的用法 160
★★10.7 替换匹配的子串 161
10.8 贪婪匹配和懒惰匹配 162
★★★10.9 条件匹配 163
★★★10.10 断言 164
10.11 字符串分割 167
10.12 应用实例 167
10.13 习题 168
第11章 玩转Python生态
11.1 Python库的安装、导入和使用 170
11.2 日期和时间库datetime 172
11.3 随机库random 173
★11.4 用OpenPyXL库处理Excel文档 174
★★★11.5 SQLite3数据库编程 179
11.5.1 数据库的结构 179
11.5.2 SQL数据库查询语句 179
11.6 jieba分词库 184
★★11.7 图像处理库PIL 186
11.7.1 图像的基本变换 187
11.7.2 图像的裁剪 188
11.7.3 图像的素描化 189
★★★11.7.4 给图像添加水印 190
★★★11.7.5 照片的exif信息及在图像上绘图和写字 192
11.8 多模块程序设计 194
11.9 Python程序的打包分发 197
11.10 习题 197
第12章 数据分析和可视化
12.1 多维数组库NumPy 199
12.2 数据分析库pandas 203
12.3 用Matplotlib绘制统计图 210
12.3.1 绘制柱状图 210
12.3.2 绘制折线图和散点图 214
12.3.3 绘制饼图 215
12.3.4 绘制热力图 215
12.3.5 绘制雷达图 216
12.3.6 绘制面积图 218
★★12.3.7 多子图绘图 219
12.4 习题 220
第13章 网络爬虫
13.1 基础爬虫四步走 221
13.2 网页获取三招式 225
13.3 用BeautifulSoup分析网页 228
13.4 用pyppeteer爬取JavaScript动态生成的网页 232
★★13.5 用pyppeteer爬取需要登录的网站 233
★★★13.6 用pyppeteer+requests编写快速爬虫 239
13.7 如何对付反爬虫措施 241
13.8 习题 241
第14章 面向对象程序设计入门
14.1 结构化程序设计和面向对象程序设计 242
14.2 Python中的类 243
14.3 对象的比较 245
14.4 输出对象 246
14.5 继承和派生 247
14.6 静态属性和静态方法 249
14.7 对象作为集合元素或字典的键 250
第15章 tkinter图形界面程序设计
15.1 控件概述 253
15.2 图形界面的布局 255
15.3 为控件绑定状态变量和事件响应函数 258
15.4 综合示例—Python火锅店点菜系统 262
15.5 对话框 266
15.6 菜单和多行编辑框示例 270
★★15.7 在图形界面中用Matplotlib绘制统计图和显示图像 272
★★15.8 Notebook、PanedWindow和TreeView控件 275
15.9 习题 276