第 1 章? 基本概念 1-1? 认识 Python?................................2 1-2? Python 的起源?.............................2 1-3? Python 语言发展史.......................3 1-4? Python 的应用范围?......................4 1-5? 静态语言与动态语言?.....................4 1-6? 跨平台的程序语言?.........................5 1-7? 系统的安装与执行?.........................5 1-8? Python?2 与 Python?3 不相容的 ? ? ???验证?...........................................5 1-9? 文件的建立、存储、执行与打开?......6 1-9-1 文件的建立 ....................................... 6 1-9-2 文件的存储 ....................................... 7 1-9-3 文件的执行 ....................................... 7 1-9-4 打开文件 ........................................... 8 1-10? 程序注释?...................................8 1-10-1 注释符号 # ...................................... 8 1-10-2 三个单引号或双引号 ..................... 9 1-11? Python 彩蛋?..............................9 习题 ............................................................. 10 第 2 章? 认识变量与基本数学运算 2-1? 用 Python 做计算?.......................12 2-2? 认识变量?...................................12 2-2-1 基本概念 ..................................... 12 2-2-2 认识变量的地址 ............................. 14 2-3? 认识程序的意义?..........................14 2-4? 认识注释的意义?..........................15 2-5? Python 变量与其他程序语言的 ? ? ???差异?.........................................15 2-6? 变量的命名原则?..........................15 2-7? 基本数学运算?.............................17 2-7-1 四则运算 2-7-2 余数和整除 ..................................... 17 2-7-3 次方................................................. 18 2-7-4 Python 语言控制运算的优先级 ..... 18 2-8? 指派运算符?................................18 2-9? Python 等号的多重指定使用?........19 2-10? 删除变量?.................................20 2-11? Python 的断行?.........................20 2-11-1 一行有多个语句 ........................... 20 2-11-2 将一个语句分成多行.................... 21 2-12? 专题——复利计算 / 计算圆面积 ? ? ? ??与圆周长?.................................21 2-12-1 银行存款复利的计算 ................... 21 2-12-2 计算圆面积与周长 ....................... 22 习题 ............................................................. 22 第 3 章? Python 的基本数据类型 3-1? type(?) 函数?...............................26 3-2? 数值数据类型?.............................26 3-2-1 整数 int ........................................... 26 3-2-2 浮点数 ............................................. 27 3-2-3 基本数值数据的使用 ..................... 27 3-2-4 整数与浮点数的运算 ..................... 27 3-2-5 二进制整数与函数 bin( ) ................ 28 3-2-6 八进制整数与函数 oct( ) ................ 29 3-2-7 十六进制整数与函数 hex( ) ........... 29 3-2-8 强制数据类型的转换 ..................... 29 3-2-9 数值运算常用的函数 ..................... 30 3-2-10 科学记数法 ................................... 31 3-3? 布尔值数据类型?..........................32 3-4? 字符串数据类型?..........................34 3-4-1 字符串的连接 ................................. 34 3-4-2 处理多于一行的字符串 ................. 35 3-4-3 转义字符 3-4-4 str( ) 函数 ........................................ 36 3-4-5 将字符串转换为整数 ..................... 37 3-4-6 字符串与整数相乘产生字符串 复制效果......................................... 37 3-4-7 聪明地使用字符串加法和换行 字符 \n ............................................ 38 3-4-8 字符串前加 r ................................... 38 3-5? 字符串与字符.............................38 3-5-1 ASCII 码 ......................................... 39 3-5-2 Unicode 码 ...................................... 39 3-5-3 utf-8 编码 ........................................ 40 3-6? bytes 数据 ................................40 3-6-1 Unicode 字符串转成 bytes 数据 ..... 41 3-6-2 bytes 数据转成 Unicode 字符串 ..... 42 3-7? 专题——地球到月球时间计算 / ? ? 计算坐标轴两点之间的距离 ...........42 3-7-1 计算地球到月球所需时间 .............. 42 3-7-2 计算坐标轴两个点之间的距离 ...... 43 习题 ............................................................. 44 第 4 章? 基本输入与输出 4-1? Python 的辅助说明 help( ) ..........47 4-2? 格式化输出数据使用 print( ).........47 4-2-1 函数 print( ) 的基本语法 ................ 47 4-2-2 格式化 print( ) 输出 ........................ 48 4-2-3 精准控制格式化的输出 ................. 50 4-2-4 format( ) 函数 ................................. 52 4-2-5 字符串输出与基本排版的应用 ...... 54 4-2-6 一个无聊的操作 ............................. 54 4-3? 输出数据到文件..........................55 4-3-1 打开一个文件 open( ) ..................... 55 4-3-2 使用 print( ) 函数输出数据到 文件 ................................................ 56 4-4? 数据输入 input( )........................56 4-5? 处理字符串的数学运算 eval( ) ......58 4-6? 列出所有内建函数 dir( )...............59 4-7? 专题——温度转换 / 房贷问题 / 正五 ? ? 角形面积 / 利用经纬度计算距离.....59 4-7-1 设计摄氏温度和华氏温度的转换 4-7-2 房屋贷款问题 ................................. 60 4-7-3 正五角形面积 ................................. 61 4-7-4 利用经纬度计算地球各城市间的 距离 ................................................ 62 习题 ............................................................. 63 第 5 章? 流程控制及 if 语句的使用 5-1? 关系运算符................................67 5-2? 逻辑运算符 ................................68 5-3? if 语句.......................................69 5-4? if … else 语句............................71 5-5? if … elif … else 语句 ..................73 5-6? 嵌套的 if 语句.............................76 5-7? 尚未设置的变量值 None..............76 5-8? 专题——BMI 程序 / 猜出生日期 / ? ? ? 十二生肖系统 / 线性方程式...........77 5-8-1 设计人体体重健康判断程序 .......... 77 5-8-2 猜出生日期 ..................................... 78 5-8-3 十二生肖系统 ................................. 80 5-8-4 求一元二次方程式的根 ................. 81 5-8-5 求解联立线性方程式 ..................... 82 习题 ............................................................. 82 第 6 章? 列表 6-1? 认识列表 ...................................87 6-1-1 列表基本定义 ................................. 87 6-1-2 读取列表元素 ................................. 88 6-1-3 列表切片 ......................................... 89 6-1-4 列表索引值是 -1 ............................ 90 6-1-5 列表最大值 max( )、最小值 min( )、总和 sum( ) ....................... 91 6-1-6 列表个数 len( ) ............................... 92 6-1-7 更改列表元素的内容 ..................... 92 6-1-8 列表的相加 ..................................... 93 6-1-9 列表乘以一个数字 ......................... 94 6-1-10 列表元素的加法操作 ................... 94 6-1-11 删除列表元素 ............................... 95 6-1-12 列表为空列表的判断 ................... 96 6-1-13 删除列表 ....................................... 96 6-1-14 补充多重指定与列表 6-2? Python 简单的面向对象概念........97 6-2-1 更改字符串大小写 lower( )/ upper( )/title( ) ................................ 97 6-2-2 删除空格符 rstrip( )/lstrip( )/ strip( ) ............................................. 98 6-2-3 格式化字符串位置 center( )/ ljust( )/rjust( ) .................................. 99 6-2-4 dir( ) 获得系统内部对象的方法 ... 100 6-3? 获得列表的方法........................101 6-4? 增加与删除列表元素 .................102 6-4-1 在列表末端增加元素 append( ) ... 102 6-4-2 插入列表元素 insert( ) .................. 102 6-4-3 删除列表元素 pop( )..................... 103 6-4-4 删除指定的元素 remove( ) ........... 103 6-5? 列表的排序..............................104 6-5-1 颠倒排序 reverse( ) ....................... 104 6-5-2 sort( ) 排序 .................................... 105 6-5-3 sorted( ) 排序 ................................ 106 6-6? 进阶列表操作...........................107 6-6-1 index( ) .......................................... 107 6-6-2 count( ) .......................................... 108 6-7? 列表内含列表...........................108 6-7-1 再谈 append( ) ............................... 109 6-7-2 extend( ) ........................................ 110 6-7-3 再看二维列表 ............................... 110 6-8? 列表的赋值与切片复制 ..............111 6-8-1 列表赋值 ........................................111 6-8-2 地址的概念 ................................... 112 6-8-3 列表的切片复制 ........................... 113 6-8-4 浅拷贝与深拷贝 ........................... 114 6-9? 再谈字符串..............................115 6-9-1 字符串的索引 ............................... 115 6-9-2 字符串切片 ................................... 115 6-9-3 函数或方法 ................................... 116 6-9-4 将字符串转成列表 ....................... 116 6-9-5 切片赋值的应用 ........................... 117 6-9-6 使用 split( ) 分割字符串 ............... 117 6-9-7 列表元素的组合 6-9-8 字符串的其他方法 ....................... 118 6-10? in 和 not in 表达式..................118 6-11? is 和 is not 表达式 ..................119 6-11-1 整数变量在内存地址的观察 ...... 120 6-11-2 将 is 和 is not 表达式应用于整数 变量 ............................................ 120 6-11-3 将 is 和 is not 表达式应用于列表 变量 ............................................ 121 6-11-4 将 is 应用于 None ....................... 121 6-12? enumerate 对象 ....................122 6-13? 专题——建立大型列表 / 用户账号 ? ? ? 管理系统 / 文件加密................123 6-13-1 制作大型的列表数据 ............... 123 6-13-2 用户账号管理系统 .................. 123 6-13-3 文件加密 ..................................... 124 习题 ........................................................... 124 第 7 章? 循环设计 7-1? 基本 for 循环 ...........................129 7-1-1 for 循环基本操作 ......................... 130 7-1-2 程序代码区块只有一行 ............... 130 7-1-3 程序代码区块有多行 ................... 131 7-1-4 将 for 循环应用于列表区间 元素 .............................................. 131 7-1-5 将 for 循环应用于数据类别的 判断 .............................................. 132 7-1-6 删除列表内重复的元素 ............... 132 7-1-7 活用 for 循环 ................................ 133 7-2? range( ) 函数...........................133 7-2-1 只有一个参数的 range( ) 函数的 应用 .............................................. 134 7-2-2 扩充专题银行存款复利的轨迹 .... 135 7-2-3 有两个参数的 range( ) 函数 ......... 135 7-2-4 有 3 个参数的 range( ) 函数 ......... 136 7-2-5 活用 range( ) ................................. 136 7-2-6 删除列表内所有元素 ................... 137 7-2-7 列表生成的应用 .......................... 138 7-2-8 打印含列表元素的列表 ............... 140 7-2-9 含有条件式的列表生成 7-2-10 列出 ASCII 码值或 Unicode 码值 的字符 ........................................ 141 7-3? 进阶的 for 循环应用 ..................142 7-3-1 嵌套 for 循环 ................................ 142 7-3-2 强制离开 for 循环——break 指令 .............................................. 143 7-3-3 for 循环暂时停止不往下执行—— continue 指令 ................................ 144 7-3-4 for … else 循环 ............................. 146 7-4? while 循环...............................147 7-4-1 基本 while 循环 ............................ 148 7-4-2 认识哨兵值 ................................... 149 7-4-3 预测学费 ....................................... 149 7-4-4 嵌套 while 循环 ............................ 150 7-4-5 强制离开 while 循环——break 指令 .............................................. 150 7-4-6 while 循环暂时停止——continue 指令 .............................................. 151 7-4-7 while 循环条件表达式与可迭代 对象 .............................................. 152 7-4-8 无限循环与 pass ........................... 153 7-5? enumerate 对象使用 for 循环 ? ? 解析 .......................................153 7-6? 专题——购物车设计 / 成绩系统 / ? ? 圆周率 ....................................155 7-6-1 设计购物车系统 ........................... 155 7-6-2 建立真实的成绩系统 ................... 156 7-6-3 计算圆周率 ................................... 157 习题 ........................................................... 158 第 8 章? 元组 8-1? 元组的定义..............................163 8-2? 读取元组元素...........................164 8-3? 遍历所有元组元素.....................164 8-4? 修改元组内容产生错误的实例.....164 8-5? 使用全新定义方式修改元组 ? ? 元素 .......................................165 8-6? 元组切片 .................................165 8-8? 列表与元组数据互换 .................167 8-9? 其他常用的元组方法 .................168 8-10? enumerate 对象在元组中的 ? ? ? 使用 .....................................168 8-11? 使用 zip( ) 打包多个对象..........169 8-12? 生成式 ..................................171 8-13? 制作大型的元组数据................171 8-14? 元组的功能 ............................172 8-15? 专题——认识元组 / 统计应用....172 8-15-1 认识元组 ..................................... 172 8-15-2 基础统计应用 ............................. 173 习题 ........................................................... 173 第 9 章? 字典 9-1? 字典的基本操作........................176 9-1-1 定义字典 .................................... 176 9-1-2 列出字典元素的值 ....................... 177 9-1-3 增加字典元素 ............................... 178 9-1-4 更改字典元素内容 ....................... 179 9-1-5 删除字典特定元素 ....................... 179 9-1-6 字典的 pop( ) 方法 ....................... 180 9-1-7 字典的 popitem( ) 方法 ................ 180 9-1-8 删除字典所有元素 ....................... 181 9-1-9 删除字典 ....................................... 181 9-1-10 建立一个空字典 ......................... 182 9-1-11 字典的复制 ................................. 182 9-1-12 取得字典元素数量 ..................... 183 9-1-13 验证元素是否存在 ..................... 183 9-1-14 设计字典的可读性技巧.............. 184 9-1-15 合并字典 update( ) ...................... 185 9-1-16 dict( ) ........................................... 185 9-1-17 再谈 zip( ) ................................... 186 9-1-18 人工智能——语意分析.............. 186 9-2? 遍历字典 .................................186 9-2-1 遍历字典的键 :值 ....................... 187 9-2-2 遍历字典的键 ............................... 188 9-2-3 依键排序与遍历字典 ................... 189 9-2-4 遍历字典的值 ............................... 189 9-2-5 依值排序与遍历字典的值 9-3? 建立字典列表...........................190 9-4? 字典内键的值是列表 .................192 9-5? 字典内键的值是字典 .................193 9-6? while 循环在字典中的应用.........194 9-7? 字典常用的函数和方法 ..............194 9-7-1 len( ) .............................................. 194 9-7-2 fromkeys( ) .................................... 195 9-7-3 get( ) .............................................. 196 9-7-4 setdefault( ) ................................... 196 9-8? 制作大型的字典数据 .................197 9-9? 专题——文件分析 / 字典生成式 / ? ? ? 英汉字典 / 文件加密.................198 9-9-1 传统方式分析文章的文字与字数 198 9-9-2 字典生成式 ................................... 199 9-9-3 设计季节的英汉字典 ................... 199 9-9-4 文件加密 ....................................... 200 习题 ........................................................... 201 第 10 章? 集合 10-1? 建立集合 ...............................205 10-1-1 使用大括号建立集合 ................. 205 10-1-2 使用 set( ) 函数定义集合 ........... 206 10-1-3 大数据与集合的应用 ................. 207 10-2? 集合的操作 ............................208 10-2-1 交集 ............................................. 208 10-2-2 联集 ............................................. 209 10-2-3 差集 ............................................. 210 10-2-4 对称差集 ..................................... 211 10-2-5 等于 ............................................. 212 10-2-6 不等于 ......................................... 212 10-2-7 是成员 in ..................................... 212 10-2-8 不是成员 not in ........................... 213 10-3? 适用集合的方法......................214 10-3-1 add( ) ........................................... 214 10-3-2 copy( ) ......................................... 215 10-3-3 remove( ) ..................................... 215 10-3-4 discard( ) ..................................... 216 10-3-5 pop( ) ........................................... 216 10-3-6 clear( ) ......................................... 217 10-3-7 isdisjoint( ) .................................. 217 10-3-8 issubset( ) .................................... 218 10-3-9 issuperset( ) ................................. 219 10-3-10 intersection_update( ) ................ 219 10-3-11 update( ) .................................... 220 10-3-12 difference_update( ) .................. 221 10-3-13 symmetric_difference_ update( ) .................................... 221 10-4? 适用于集合的基本函数操作 ......222 10-5? 冻结集合 frozenset ................222 10-6? 专题——夏令营程序 / 程序效率 / ? ? ? 集合生成式 / 鸡尾酒实例..........223 10-6-1 夏令营程序设计 ......................... 223 10-6-2 集合生成式 ................................. 223 10-6-3 提高程序效率 ............................. 224 10-6-4 鸡尾酒的实例 ............................. 224 习题 ........................................................... 225 第 11 章? 函数设计 11-1? Python 函数基本概念 .............229 11-1-1 函数的定义 ................................. 229 11-1-2 没有传入参数也没有返回值的 函数 ............................................ 230 11-1-3 在 Python Shell 中执行函数 ....... 231 11-2? 函数的参数设计......................231 11-2-1 传递一个参数 ............................. 231 11-2-2 多个参数传递 ............................. 232 11-2-3 关键词参数 :参数名称 = 值 ...... 233 11-2-4 参数默认值的处理 ..................... 234 11-3? 函数返回值 ............................235 11-3-1 返回 None ................................... 235 11-3-2 简单返回数值数据 ..................... 237 11-3-3 返回多个数据的应用.................. 238 11-3-4 简单返回字符串数据.................. 238 11-3-5 再谈参数默认值 ......................... 239 11-3-6 函数返回字典数据 ..................... 239 11-3-7 将循环应用于建立 VIP 会员 字典 ............................................ 240 11-4-1 基本传递列表参数的应用 .......... 241 11-4-2 观察传递一般变量与列表变量到 函数的区别 ................................. 242 11-4-3 在函数内修改列表的内容 .......... 243 11-4-4 使用副本传递列表 ..................... 244 11-4-5 传递列表的提醒 ......................... 245 11-5? 传递任意数量的参数................246 11-5-1 传递处理任意数量的参数 .......... 246 11-5-2 设计含有一般参数与任意数量 参数的函数 ................................. 248 11-5-3 设计含有一般参数与任意数量 的关键词参数 ............................. 248 11-6? 进一步认识函数......................249 11-6-1 函数文件字符串 docstring .......... 249 11-6-2 函数是一个对象 ......................... 250 11-6-3 函数可以是数据结构成员 .......... 250 11-6-4 函数可以当作参数传递给其他 函数 ............................................ 251 11-6-5 函数当作参数与 *args 不定量的 参数 ............................................ 252 11-6-6 嵌套函数 ..................................... 252 11-6-7 函数也可以当作返回值 ............. 252 11-6-8 闭包 closure ................................ 253 11-7? 递归式函数设计......................254 11-8? 局部变量与全局变量................255 11-8-1 全局变量可以在所有函 数中使用..................................... 256 11-8-2 局部变量与全局变量使用相同 的名称 ........................................ 256 11-8-3 程序设计注意事项 ..................... 257 11-8-4 locals( ) 和 globals( ) ................... 258 11-9? 匿名函数 lambda ...................259 11-9-1 匿名函数 lambda 的语法 ............ 259 11-9-2 使用 lambda 匿名函数的时机 .... 260 11-9-3 匿名函数应用于高阶函数的 参数 ............................................ 260 11-9-4 匿名函数的使用与 fifilter( ) ......... 261 11-9-5 匿名函数的使用与 map( ) .......... 262 11-9-6 匿名函数的使用与 reduce( ) ...... 263 11-10? pass 与函数 ........................264 11-11? type 关键词应用于函数 .........264 11-12? 设计自己的 range( ) .............265 11-13? 装饰器 ................................265 11-14? 专题——函数的应用 / 最大公约数 / ???? 质数...................................269 11-14-1 用函数重新设计记录一篇文章 每个单词出现次数 ................... 269 11-14-2 最大公约数 ............................... 269 11-14-3 质数 ........................................... 270 习题 ........................................................... 270 第 12 章? 类—面向对象的程序设计 12-1? 类的定义与使用......................276 12-1-1 定义类 ......................................... 276 12-1-2 操作类的属性与方法 ................. 276 12-1-3 类的建构方法 ............................. 277 12-1-4 属性初始值的设置 ..................... 279 12-2? 类的访问权限—封装 ............280 12-2-1 私有属性 ..................................... 280 12-2-2 私有方法 ..................................... 281 12-2-3 从存取属性值看 Python 风格 property( ) ................................... 282 12-2-4 装饰器 @property ....................... 284 12-2-5 方法与属性的类型 ..................... 285 12-2-6 静态方法 ..................................... 286 12-3? 类的继承 ...............................286 12-3-1 衍生类继承基类的实例应用 ...... 287 12-3-2 如何取得基类的私有属性 .......... 288 12-3-3 衍生类与基类有相同名称的 属性 ............................................ 288 12-3-4 衍生类与基类有相同名称的 方法 ............................................ 289 12-3-5 衍生类引用基类的方法.............. 291 12-3-6 衍生类有自己的方法 ................. 291 12-3-7 “三代同堂”的类与取得基类的 属性 super( ) ............................... 292 12-3-8 兄弟类属性的取得 12-3-9 认识 Python 类方法的 self 参数 ............................................ 294 12-4? 多态 .....................................295 12-5? 多重继承 ...............................296 12-5-1 基本概念 .................................. 296 12-5-2 super( ) 应用于多重继承的 问题 ............................................ 298 12-6? type 与 instance....................299 12-6-1 type( ) .......................................... 299 12-6-2 isinstance( ) ................................. 300 12-7? 特殊属性 ...............................301 12-7-1 文件字符串 __doc__ .................. 301 12-7-2 __name__ 属性 ........................... 302 12-8? 类的特殊方法.........................303 12-8-1 __str__( ) 方法 ............................ 303 12-8-2 __repr__( ) 方法 .......................... 304 12-8-3 __iter__( ) 方法 ........................... 304 12-8-4 __eq__( ) 方法 ............................ 305 12-9? 专题——几何数据的应用..........306 习题 ........................................................... 307 第 13 章? 设计与应用模块 13-1? 将自建的函数存储在模块中 ......311 13-1-1 准备工作 ..................................... 311 13-1-2 建立函数内容的模块 ................. 312 13-2? 应用自己建立的函数模块 .........312 13-2-1 import 模块名称 ......................... 312 13-2-2 导入模块内特定单一函数 .......... 313 13-2-3 导入模块内多个函数 ................. 313 13-2-4 导入模块所有函数 ..................... 314 13-2-5 使用 as 给函数指定替代名称 .... 314 13-2-6 使用 as 给模块指定替代名称 .... 314 13-3? 将自建的类存储在模块内 .........315 13-3-1 准备工作 ..................................... 315 13-3-2 建立类内容的模块 ..................... 316 13-4? 应用自己建立的类模块 ............316 13-4-1 导入模块的单一类 ..................... 316 13-4-2 导入模块的多个类 ..................... 317 13-4-3 导入模块内所有类 ..................... 317 13-4-4 import 模块名称 ......................... 317 13-4-5 模块内导入另一个模块的类 ...... 318 13-5? 随机数 random 模块...............319 13-5-1 randint( ) ...................................... 319 13-5-2 choice( ) ...................................... 321 13-5-3 shufflfle( ) ...................................... 322 13-5-4 sample( ) ...................................... 322 13-5-5 uniform( ) .................................... 322 13-5-6 random( ) ..................................... 323 13-6? 时间 time 模块 .......................323 13-6-1 time( ) .......................................... 323 13-6-2 sleep( ) ......................................... 324 13-6-3 asctime( ) ..................................... 325 13-6-4 localtime( ) .................................. 325 13-7? 系统 sys 模块 ........................326 13-7-1 version 和 version_info 属性 ...... 326 13-7-2 stdin 对象 .................................... 326 13-7-3 stdout 对象 .................................. 327 13-7-4 platform 属性 .............................. 327 13-7-5 path 属性 ..................................... 328 13-7-6 getwindowsversion( ) .................. 328 13-7-7 executable.................................... 328 13-7-8 获得 getrecursionlimit( ) 与设置 setrecursionlimit( ) 循环次数 ..... 329 13-7-9 DOS 命令行自变量 .................... 329 13-8? keyword 模块........................329 13-8-1 kwlist 属性 .................................. 329 13-8-2 iskeyword( ) ................................ 330 13-9? 日期 calendar 模块 ................330 13-9-1 列出某年是否闰年 isleap( ) ....... 330 13-9-2 打印月历 month( ) ...................... 331 13-9-3 打印年历 calendar( ) ................... 331 13-10? 几个增强 Python 功力的模块 .332 13-10-1 collections 模块 ......................... 332 13-10-2 pprint 模块 ................................ 336 13-10-3 itertools 模块 ............................. 337 13-11? 专题——赌场游戏骗局 / 13-11-1 赌场游戏骗局 ........................... 338 13-11-2 蒙特卡罗模拟 ........................... 339 13-11-3 再谈文件加密 ........................... 340 13-11-4 只有自己可以破解的加密 程序 .......................................... 341 习题 ........................................................... 342 第 14 章 文件的读取与写入 14-1? 文件夹与文件路径...................346 14-1-1 绝对路径与相对路径 ................. 346 14-1-2 os 模块与 os.path 模块 ............... 346 14-1-3 取得目前工作目录 os. getcwd( ) ..................................... 347 14-1-4 取得绝对路径 os.path.abspath .... 347 14-1-5 返回特定路段相对路径 os. path.relpath( ) .............................. 347 14-1-6 检查路径方法 exist/isabs/isdir/ isfifile ............................................ 348 14-1-7 文件与目录的操作 mkdir/rmdir/ remove/chdir ............................... 348 14-1-8 返回文件路径 os.path.join( ) ...... 350 14-1-9 获得特定文件的大小 os.path. getsize( ) ..................................... 350 14-1-10 获得特定工作目录的内容 os.listdir( ) ................................. 351 14-1-11 获得特定工作目录内容 glob .... 352 14-1-12 遍历目录树 os.walk( ) .............. 352 14-2? 读取文件 ...............................353 14-2-1 读取整个文件 read( ) .................. 354 14-2-2 with 关键词 ................................. 354 14-2-3 逐行读取文件内容 ..................... 355 14-2-4 逐行读取使用 readlines( ) .......... 356 14-2-5 数据组合 ..................................... 357 14-2-6 字符串的替换 ............................. 357 14-2-7 数据的查找 ................................. 358 14-2-8 数据查找使用 fifind( ) .................. 358 14-2-9 数据查找 rfifind( ) ......................... 359 14-2-10 分批读取文件数据 ................... 359 14-3? 写入文件 ...............................360 14-3-1 将执行结果写入空的文件内 ...... 360 14-3-2 写入数值资料 ............................. 361 14-3-3 输出多行数据的实例 ................. 362 14-3-4 建立附加文件 ............................. 362 14-3-5 文件很长时的分段写入.............. 363 14-4? 读取和写入二进制文件 ............364 14-4-1 复制二进制文件 ......................... 364 14-4-2 随机读取二进制文件 ................. 365 14-5? shutil 模块.............................366 14-5-1 文件的复制 copy( ) ..................... 366 14-5-2 目录的复制 copytree( ) ............... 366 14-5-3 文件的移动 move( ) .................... 367 14-5-4 文件名的更改 move( ) ................ 367 14-5-5 目录的移动 move( ) .................... 368 14-5-6 更改目录名称 move( ) ................ 368 14-5-7 删除有数据的目录 rmtree( ) ...... 368 14-5-8 安全删除文件或目录 send2trash( ) ................................ 369 14-6? 文件压缩与解压缩...................369 14-6-1 执行文件或目录的压缩.............. 369 14-6-2 读取 zip 文件 .............................. 370 14-6-3 解压缩 zip 文件 .......................... 371 14-7? 认识编码格式 encode.............371 14-7-1 繁体中文 Windows 操作系统 记事本默认的编码 ..................... 371 14-7-2 utf-8 编码 .................................... 372 14-7-3 认识 utf-8 编码的 BOM ............. 373 14-8? 剪贴板的应用.........................374 14-9? 专题—分析文件 / 加密文件....375 14-9-1 以读取文件方式处理分析文件 ... 375 14-9-2 加密文件 ..................................... 376 习题 第 15 章? 程序除错与异常处理 15-1? 程序异常?...............................382 15-1-1 一个除数为 0 的错误 ................. 382 15-1-2 撰写异常处理程序 try - except .. 382 15-1-3 try - except - else ......................... 384 15-1-4 找不到文件的错误 FileNotFoundError ...................... 384 15-1-5 分析单一文件的字数 ................. 385 15-1-6 分析多个文件的字数 ................. 386 15-2? 设计多组异常处理程序?............386 15-2-1 常见的异常对象 ......................... 387 15-2-2 设计捕捉多个异常 ..................... 388 15-2-3 使用一个 except 捕捉多个 异常 ............................................ 388 15-2-4 处理异常但是使用 Python 内建 的错误消息 ................................. 389 15-2-5 捕捉所有异常 ............................. 389 15-3? 丢出异常?...............................390 15-4? 记录 Traceback 字符串?..........391 15-5? finally?...................................393 15-6? 程序断言 assert?.....................393 15-6-1 设计断言 ................................. 393 15-6-2 停用断言 ..................................... 396 15-7? 程序日志模块 logging?.............396 15-7-1 logging 模块 ................................ 396 15-7-2 logging 的等级 ............................ 397 15-7-3 格式化 logging 消息输出 format... 398 15-7-4 时间信息 asctime ........................ 398 15-7-5 format 内的 message ................... 399 15-7-6 列出 levelname ........................... 399 15-7-7 使用 logging 列出变量变化的 应用 ............................................ 400 15-7-8 正式追踪 factorial 数值的应用 .. 400 15-7-9 将程序日志 logging 输出到 文件 ............................................ 401 15-7-10 隐藏程序日志 logging 的 DEBUG 等级使用 CRITICAL ................ 402 15-7-11 停用程序日志 logging .............. 402 15-8? 程序除错的典故?......................402 习题 ........................................................... 403 第 16 章? 正则表达式 16-1? 使用 Python 硬功夫查找文字?...407 16-2? 正则表达式的基础?...................409 16-2-1 建立查找字符串模式 ................. 409 16-2-2 使用 re.compile( ) 建立 Regex 对象 ............................................ 409 16-2-3 查找对象 ..................................... 409 16-2-4 fifi ndall( ) ....................................... 410 16-2-5 再看 re 模块 ................................ 411 16-2-6 再看正则表达式 ......................... 412 16-3? 更多查找比对模式?...................412 16-3-1 使用小括号分组 ......................... 412 16-3-2 groups( ) ...................................... 413 16-3-3 区域号码是在小括号内.............. 414 16-3-4 使用管道 | ................................... 414 16-3-5 多个分组的管道查找 ................. 415 16-3-6 使用 ? 做查找 ............................. 416 16-3-7 使用 * 号做查找 ......................... 416 16-3-8 使用 + 号做查找 ......................... 417 16-3-9 查找时忽略大小写 ..................... 418 16-4? 贪婪与非贪婪查找?...................418 16-4-1 查找时使用大括号设置比对 次数 ............................................ 418 16-4-2 贪婪与非贪婪查找 16-5? 正则表达式的特殊字符 ............420 16-5-1 特殊字符表 ................................. 420 16-5-2 字符分类 ..................................... 421 16-5-3 字符分类的 ^ 字符 ..................... 421 16-5-4 正则表示法的 ^ 字符.................. 422 16-5-5 正则表示法的 $ 字符 ................. 422 16-5-6 单一字符使用通配符“.”........... 424 16-5-7 所有字符使用通配符“.*” ......... 424 16-5-8 换行字符的处理 ......................... 424 16-6? MatchObject 对象 .................425 16-6-1 re.match( ) ................................... 425 16-6-2 MatchObject 几个重要的方法 .... 426 16-7? 抢救 CIA 情报员——sub( ) ? ? ? 方法 .....................................427 16-7-1 一般的应用 ................................. 427 16-7-2 抢救 CIA 情报员 ........................ 428 16-8? 处理比较复杂的正则表示法 ......428 16-8-1 将正则表达式拆成多行字符串 .. 429 16-8-2 re.VERBOSE .............................. 429 16-8-3 电子邮件地址的查找 ................. 430 16-8-4 re.IGNORECASE/re.DOTALL/ re.VERBOSE .............................. 430 习题 ........................................................... 431 第 17 章? 用 Python 处理图像文件 17-1? 认识 Pillow 模块的 RGBA .......434 17-1-1 getrgb( ) ....................................... 434 17-1-2 getcolor( ) .................................... 434 17-2? Pillow 模块的盒子元组 ............435 17-2-1 基本概念 ..................................... 435 17-2-2 计算机眼中的图像 ..................... 436 17-3? 图像的基本操作......................436 17-3-1 打开图像对象 ............................. 436 17-3-2 图像大小属性 ............................. 436 17-3-3 取得图像对象文件名 ................. 437 17-3-4 取得图像对象的文件格式 .......... 437 17-3-5 存储文件 ..................................... 437 17-3-6 屏幕显示图像 ............................. 438 17-3-7 建立新的图像对象 ..................... 438 17-4? 图像的编辑 ............................439 17-4-1 更改图像大小 ............................. 439 17-4-2 图像的旋转 ................................. 440 17-4-3 图像的翻转 ................................. 441 17-4-4 图像像素的编辑 ......................... 442 17-5? 裁切、复制与图像合成 ............443 17-5-1 裁切图像 ..................................... 443 17-5-2 复制图像 ..................................... 443 17-5-3 图像合成 ..................................... 444 17-5-4 将裁切图片填满图像区间 .......... 444 17-6? 图像滤镜 ...............................445 17-7? 在图像内绘制图案...................446 17-7-1 绘制点 ......................................... 446 17-7-2 绘制线条 ..................................... 446 17-7-3 绘制圆或椭圆 ............................. 447 17-7-4 绘制矩形 ..................................... 447 17-7-5 绘制多边形 ................................. 448 17-8? 在图像内填写文字...................448 17-9? 专题——建立 QR code/ 辨识 ? ? ? 车牌与建立停车场管理系统......450 17-9-1 建立 QR code .............................. 450 17-9-2 文字辨识与停车场管理系统 ...... 455 17-9-3 辨识繁体中文 ............................. 459 17-9-4 辨识简体中文 ............................. 460 17-10? 专题——词云 (Word Cloud) ? ? ? ? 设计....................................460 17-10-1 安装 Word Cloud ...................... 460 17-10-2 我的第一个词云程序 ............... 461 17-10-3 建立含中文字的词云结果失败 462 17-10-4 建立含中文字的词云 ............... 463 17-10-5 进一步认识 jieba 模块的分词 .. 466 17-10-6 建立含图片背景的词云............ 467 习题 ........................................................... 469 第 18 章? 使用 tkinter 开发 GUI 程序 18-1? 建立窗口 ...............................474 18-2? 标签 Label ............................475 18-3? 窗口组件配置管理员................477 18-3-1 pack( ) 方法 18-3-2 grid( ) 方法 .................................. 479 18-3-3 place( ) 方法 ................................ 482 18-3-4 窗口组件位置的总结 ................. 482 18-4? 功能按钮 Button ....................483 18-4-1 基本概念 ..................................... 483 18-4-2 设置窗口背景 confifig( ) ............... 484 18-4-3 使用 lambda 表达式的好时机 .... 485 18-5? 变量类型 ...............................485 18-6? 文本框 Entry .........................486 18-7? 文字区域 Text........................490 18-8? 滚动条 Scrollbar....................491 18-9? 选项按钮 Radiobutton............492 18-10? 复选框 Checkbutton ............495 18-11? 对话框 messagebox ............496 18-12? 图形 PhotoImage ................499 18-12-1 图形与标签的应用 ................... 500 18-12-2 图形与功能按钮的应用............ 500 18-13? 尺度 Scale 的控制................501 18-14? 菜单 Menu 的设计................503 18-15? 专题——设计小计算器 ..........504 习题 ........................................................... 506 第 19 章? 动画与游戏 19-1? 绘图功能 ...............................510 19-1-1 建立画布 ..................................... 510 19-1-2 绘制线条 create_line( ) ............... 510 19-1-3 绘制矩形 create_rectangle( ) ...... 513 19-1-4 绘制圆弧 create_arc( ) ................ 514 19-1-5 绘制圆或椭圆 create_oval( ) ...... 516 19-1-6 绘制多边形 create_polygon( ) .... 517 19-1-7 输出文字 create_text( ) ............... 517 19-1-8 更改画布背景颜色 ..................... 518 19-1-9 插入图像 create_image( ) ........... 518 19-2? 尺度控制画布背景颜色 ............519 19-3? 动画设计 ...............................520 19-3-1 基本动画 ..................................... 520 19-3-2 多个球移动的设计 ..................... 521 19-3-3 将随机数应用于多个球体的 移动 ............................................ 522 19-3-4 消息绑定 ..................................... 523 19-3-5 再谈动画设计 ............................. 524 19-4? 反弹球游戏设计......................526 19-4-1 设计球往下移动 ......................... 526 19-4-2 设计让球上下反弹 ..................... 527 19-4-3 设计让球在画布四面反弹 .......... 528 19-4-4 建立球拍 ..................................... 529 19-4-5 设计球拍移动 ............................. 530 19-4-6 球拍与球碰撞的处理 ................. 531 19-4-7 完整的游戏 ................................. 532 19-5? 专题—使用 tkinter 处理谢尔 ? ? ? 宾斯基三角形.........................534 习题 ........................................................... 537 第 20 章? 数据图表的设计 20-1? 绘制简单的折线图...................541 20-1-1 显示绘制的图形 show( ) ............ 541 20-1-2 画线 plot( ) .................................. 541 20-1-3 线条宽度 linewidth ..................... 542 20-1-4 标题的显示 ................................. 543 20-1-5 坐标轴刻度的设置 ..................... 543 20-1-6 修订图表的起始值 ..................... 544 20-1-7 多组数据的应用 ......................... 545 20-1-8 线条色彩与样式 ......................... 546 20-1-9 刻度设计 ..................................... 548 20-1-10 图例 legend( )............................ 549 20-1-11 保存图表 ................................... 552 20-2? 绘制散点图 scatter( )..............553 20-2-1 基本散点图的绘制 ..................... 553 20-2-2 绘制系列点 ................................. 553 20-2-3 设置绘图区间 ............................. 555 20-3? Numpy 模块..........................555 20-3-1 建立一个简单的数组 linspace( ) 和 arange( ) ................................. 556 20-3-2 绘制波形 ..................................... 556 20-3-3 建立宽度不等的散点图.............. 558 20-3-4 填满区间 ..................................... 558 23-3-5 色彩映射 ..................................... 560 20-4-1 一个简单的应用 ......................... 563 20-4-2 随机数的移动 ............................. 563 20-4-3 隐藏坐标 ..................................... 564 20-5? 绘制多个图表.........................565 20-5-1 一个程序有多个图表 ................. 565 20-5-2 含有子图的图表 ......................... 566 20-6? 直方图的制作.........................568 20-6-1 bar( ) ............................................ 568 20-6-2 hist( ) ........................................... 570 20-7? 圆饼图的制作 pie( ) ................571 20-8? 图表显示中文.........................571 20-9? 专题——股市数据读取与图表 ? ? ? 制作 .....................................572 20-9-1 Stock( ) 建构元 ........................... 572 20-9-2 Stock 对象属性 ........................... 573 20-9-3 Stock 对象方法 ........................... 574 20-9-4 取得单一股票的实时数据 .......... 576 习题 ........................................................... 576 第 21 章? JSON 资料 21-1 认识 JSON 数据格式 ..............583 21-1-1 对象(object) ............................. 583 21-1-2 数组(array) ............................... 583 21-1-3 JSON 数据存在方式 ................... 584 21-2 将 Python 应用在 JSON 字符串 ??? 形式数据...............................584 21-2-1 使用 dumps( ) 将 Python 数据 转成 JSON 格式 ......................... 584 21-2-2 dumps( ) 的 sort_keys 参数 ......... 585 21-2-3 dumps( ) 的 indent 参数 .............. 586 21-2-4 使用 loads( ) 将 JSON 格式数据 转成 Python 数据 ....................... 586 21-2-5 一个 JSON 文件只能放一个 JSON 对象 .................................. 587 21-3 将 Python 应用在 JSON 文件 ..588 21-3-1 使用 dump( ) 将 Python 数据 转成 JSON 文件 ......................... 588 21-3-2 使用 load( ) 读取 JSON 文件 ..... 589 21-3-3 将中文字典数据转成 JSON 文件 ............................................ 589 21-4 简单的 JSON 文件应用 ...........590 21-5 人口数据的 JSON 文件 ...........591 21-5-1 认识人口统计的 JSON 文件 ...... 591 21-5-2 认识 pygal.maps.world 的国家 代码信息..................................... 592 第 22 章? 使用 Python 处理 CSV 文件 22-1 建立一个 CSV 文件 ................596 22-2 用记事本打开 CSV 文件 ..........597 22-3 CSV 模块..............................597 22-4 读取 CSV 文件.......................597 22-4-1 使用 open( ) 打开 CSV 文件 ...... 597 22-4-2 建立 Reader 对象 ........................ 597 22-4-3 用循环列出 Reader 对象数据 .... 598 22-4-4 用循环列出列表内容 ................. 598 22-4-5 使用列表索引读取 CSV 内容 .... 599 22-4-6 DictReader( ) ............................... 599 22-5 写入 CSV 文件.......................600 22-5-1 打开要写入的文件与关闭文件 .. 600 22-5-2 建立 writer 对象 ......................... 601 22-5-3 输出列表 writerow( ) .................. 601 22-5-4 delimiter 关键词.......................... 602 22-5-5 写入字典数据 DictWriter( ) ........ 602 22-6 专题——使用 CSV 文件绘制 ? ? ? 气象图表...............................603 22-6-1 台北市 2017 年 1 月气象资料 .... 603 22-6-2 列出标题数据 ............................. 604 22-6-3 读取最高温与最低温 ................. 605 22-6-4 绘制最高温 ................................. 605 22-6-5 设置绘图区大小 ......................... 606 22-6-6 日期格式 ..................................... 606 22-6-7 在图表增加日期刻度 ................. 607 22-6-8 日期位置的旋转 ...................... 608 22-6-9 绘制最高温与最低温 ................. 609 22-6-10 填满最高温与最低温之间的 区域 .......................................... 610 22-6-11 后记 ........................................... 610 习题 第 23 章? Numpy 模块 23-1 数组 ndarray .........................613 23-2 Numpy 的数据形态.................613 23-3 一维数组 ...............................614 23-3-1 认识 ndarray 的属性 ................... 614 23-3-2 建立一维数组 ............................. 614 23-3-3 一维数组的四则运算 ................. 616 23-3-4 一维数组的关系运算符运算 ...... 616 23-3-5 数组切片 ..................................... 617 23-3-6 数组结合或是加入数组元素 ...... 617 23-3-7 在数组指定索引位置插入元素 .. 617 23-3-8 删除数组指定索引位置的元素 .. 617 23-3-9 向量内积 ..................................... 618 23-3-10 向量叉积 ................................... 618 23-3-11 向量外积 ................................... 618 23-3-12 将迭代运算应用在一维数组 .... 619 23-4 二维数组 ...............................619 23-4-1 建立二维数组 ............................. 620 23-4-2 二维数组相对位置的四则运算 .. 621 23-4-3 二维数组的关系运算符运算 ...... 621 23-4-4 取得与设置二维数组元素 .......... 621 23-4-5 二维数组切片 ............................. 622 23-4-6 更改数组外形 ............................. 623 23-4-7 转置矩阵 ..................................... 623 23-4-8 将数组分割成子数组 ................. 624 23-4-9 矩阵堆栈 ..................................... 624 23-4-10 二维数组矩阵乘法运算............ 625 23-4-11 将迭代运算应用在二维数组 .... 626 23-5 简单线性代数运算...................626 23-5-1 一元二次方程式 ......................... 626 23-5-2 解联立线性方程式 ................. 627 23-6 Numpy 的广播功能.................627 23-7 常用的数学函数......................628 23-7-1 三角函数相关知识 ..................... 628 23-7-2 和 sum( )、积 prod( )、差 diff( ) 函数 ............................................ 629 23-7-3 舍去函数 ..................................... 630 23-7-4 最大公因子与最小公倍数 .......... 631 23-7-5 指数与对数 ................................. 631 23-7-6 算术运算 ..................................... 632 23-7-7 其他函数 ..................................... 632 23-8 随机数函数 ............................634 23-8-1 简单随机数据 ............................. 634 23-8-2 顺序变更 ..................................... 635 23-8-3 分布 ............................................. 636 23-9 统计函数 ...............................637 23-9-1 统计 ............................................. 637 23-9-2 平均和变异数 ............................. 638 23-10 文件的输入与输出 ...................639 23-10-1 读取文本文件 ........................... 639 23-10-2 写入文本文件 ........................... 640 习题 ........................................................... 640 第 24 章? Scipy 模块 24-1 线性代数 scipy.linalg..............644 24-1-1 解联立线性方程式 ..................... 644 24-1-2 计算行列式 Determinant ............ 645 24-1-3 特征值和特征向量 ..................... 645 24-2 统计 scipy.stats.....................646 24-2-1 离散均匀分布 Uniform discrete distribution .................................. 646 24-2-2 二项分布 Binomial distribution .. 648 24-2-3 连续常态分布 ............................. 649 24-3 优化 scipy.optimize ...............653 24-3-1 解一元二次方程式的根.............. 653 24-3-2 解联立线性方程式 ..................... 653 24-3-3 计算 2 个线性方程式的交叉点 .. 654 24-3-4 找出线性方程式的最小值和 最大值 ........................................ 655 24-4 插值 scipy.interpolate............657 习题 ........................................................... 659 第 25 章? Pandas 模块 25-1 Series..................................662 25-1-1 使用列表 list 建立 Series 对象 ... 662 25-1-2 使用 Python 字典 dict 建立 Series 对象 .................................. 663 25-1-3 使用 Numpy 的 ndarray 建立 Series 对象 ............................................ 663 25-1-4 建立含索引的 Series 对象 .......... 663 25-1-5 使用纯量建立 Series 对象 .......... 664 25-1-6 列出 Series 对象索引与值 .......... 664 25-1-7 Series 的运算 .............................. 664 25-2 DataFrame...........................666 25-2-1 建立 DataFrame 使用 Series ....... 666 25-2-2 字段 columns 属性 ...................... 667 25-2-3 Series 对象的 name 属性 ............ 667 25-2-4 使用元素是字典的列表建立 DataFrame ................................... 668 25-2-5 使用字典建立 DataFrame ........... 668 25-2-6 index 属性 ................................... 669 25-2-7 将 columns 字段当作 DataFrame 对象的 index ............................... 669 25-3 基本 Pandas 数据分析与处理 ..670 25-3-1 索引参照属性 ............................. 670 25-3-2 直接索引 ..................................... 671 25-3-3 四则运算方法 ............................. 672 25-3-4 逻辑运算方法 ............................. 672 25-3-5 Numpy 的函数应用在 Pandas .... 673 25-3-6 NaN 相关的运算 ......................... 673 25-3-7 NaN 的处理 ................................ 674 25-3-8 几个简单的统计函数 ................. 675 25-3-9 增加 index ................................... 676 25-3-10 删除 index ................................. 677 25-3-11 排序 ........................................... 677 25-4 文件的输入与输出...................678 25-4-1 写入 CSV 格式文件.................... 678 25-4-2 读取 CSV 格式文件.................... 679 25-5 Pandas 绘图 .........................679 25-5-1 使用 Series 绘制折线图表 .......... 680 25-5-2 使用 DataFrame 绘制图表的 基本知识..................................... 680 25-5-3 柱形图的设计 ............................. 681 25-5-4 一个图表含不同数值数据 .......... 682 25-5-5 多个数值轴的设计 ..................... 683 25-5-6 使用 Series 对象设计圆饼图 ...... 684 25-6 时间序列(Time Series) ........685 25-6-1 时间模块 datetime ...................... 685 25-6-2 使用 Python 的 datetime 模块 建立含时间戳的 Series 对象 ...... 687 25-6-3 Pandas 的时间区间方法 ............. 689 25-6-4 将时间序列绘制折线图.............. 691 25-7 专题——鸢尾花......................691 25-7-1 网络爬虫 ..................................... 692 25-7-2 将鸢尾花数据集转成 DataFrame ... 693 25-7-3 散点图的制作 ............................. 693 25-7-4 鸢尾花分类统计与柱形图 .......... 695 习题 ........................................................... 696 附录 A? 安装 Python.....................699 在 Windows 操作系统中安装 Python...700 附录 B? 安装第三方模块 ................ 702 B-1? pip 工具 ..............................703 B-1-1 在 Windows 系统中将 Python 3.7 安装在 C:\ ..................................... 703 B-1-2 将 Python 3.7 安装在硬盘 更深层 .......................................... 703 B-2? 启动 DOS 与安装模块 ..............704 B-2-1 DOS 环境 ..................................... 704 B-2-2 DOS 命令提示字符 ...................... 705 B-3? 导入模块安装更新版模块...........705 B-4? 列出所安装的模块 ....................706 B-5? 安装更新版模块 .......................706 B-6? 刪除模块.................................706 B-7? 查找更多模块 ..........................706 B-8? 安装新版 pip ...........................706 附录 C? 函数或方法索引表............. 707 附录 D? RGB 色彩表.....................714 附录 E? ASCII 码值表 ................... 720