重磅推荐
【产品特色】

【编辑推荐】
小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松、愉快中学会Python!
【内容简介】
本书提倡理解为主,应用为王。因此,只要有可能,小甲鱼(注:作者)都会通过生动的实例来让大家理解概念。   虽然这是一本入门书籍,但本书的“野心”并不止于“初级水平”的教学。本书前半部分首先讲解基础的Python 3语法知识,包括列表、元组、字符串、字典以及各种语句;之后循序渐进地介绍一些相对高级的主题,包括抽象、异常、魔法方法以及属性迭代器。后半部分则围绕着Python 3在爬虫、界面开发和游戏开发上的应用,通过实例引导读者进行深入学习和探究,既富有乐趣,又锻炼了读者的动手能力。   本书适合学习Python 3的入门读者,也适合对编程一无所知,但渴望用编程改变世界的朋友们。
【目录】
第1章 就这么愉快地开始吧 1
视频讲解:13分钟(1个)钟
1.1 获得Python 1
1.2 从IDLE启动Python 2
1.3 失败的尝试 3
1.4 尝试点儿新的东西 3
1.5 为什么会这样 4
第2章 用Python设计*个游戏 5
视频讲解:24分钟(1个)钟
2.1 *个小游戏 5
2.2 缩进 6
2.3 BIF 7
第3章 成为高手前必须知道的一些基础知识 9
视频讲解:82分钟(4个)钟
3.1 变量 9
3.2 字符串 10
3.3 原始字符串 11
3.4 长字符串 12
3.5 改进我们的小游戏 13
3.6 条件分支 14
3.7 初识循环 15
3.8 引入外援 16
3.9 闲聊数据类型 17
3.9.1 整型 18
3.9.2 浮点型 18
3.9.3 布尔类型 19
3.9.4 类型转换 19
3.9.5 获得关于类型的信息 20
3.10 常用操作符 21
3.10.1 算术操作符 21
3.10.2 优先级问题 22
3.10.3 比较操作符 23
3.10.4 逻辑操作符 23
第4章 了不起的分支和循环 25
视频讲解:42分钟(3个)钟
4.1 分支和循环 25
4.2 快速上手 27
4.3 避免“悬挂else”问题 28
4.4 条件表达式(三元操作符) 29
4.5 断言 31
4.6 while循环语句 31
4.7 for循环语句 32
4.8 break语句 34
4.9 continue语句 35
4.10 else语句 35
第5章 列表、元组和字符串 37
视频讲解:137分钟(7个)钟
5.1 列表:一个“打了激素”的数组 37
5.1.1 创建列表 37
5.1.2 向列表添加元素 38
5.1.3 从列表中获取元素 39
5.1.4 从列表删除元素 40
5.1.5 列表切片 42
5.1.6 进阶玩法 43
5.1.7 一些常用操作符 44
5.1.8 列表的小伙伴们 46
5.2 元组:戴上了“枷锁”的列表 47
5.2.1 创建和访问一个元组 47
5.2.2 更新和删除元组 49
5.3 字符串 50
5.3.1 各种内置方法 51
5.3.2 格式化 54
5.4 序列 57
第6章 函数 62
视频讲解:140分钟(8个)钟
6.1 Python的乐高积木 62
6.1.1 创建和调用函数 62
6.1.2 函数的参数 63
6.1.3 函数的返回值 64
6.2 灵活即强大 65
6.2.1 形参和实参 65
6.2.2 函数文档 66
6.2.3 关键字参数 67
6.2.4 默认参数 67
6.2.5 收集参数 68
6.3 我的地盘听我的 70
6.3.1 局部变量 70
6.3.2 全局变量 71
6.3.3 global关键字 73
6.3.4 内嵌函数 73
6.3.5 LEGB原则 74
6.3.6 闭包 75
6.3.7 装饰器 78
6.4 函数式编程 80
6.4.1 lambda 80
6.4.2 filter() 81
6.4.3 map() 82
6.5 递归 83
6.5.1 递归是什么 83
6.5.2 写一个求阶乘的函数 85
6.5.3 一帮小兔子——斐波那契数列 87
6.5.4 汉诺塔 89
第7章 字典和集合 92
视频讲解:46分钟(3个)钟
7.1 字典:当索引不好用时 92
7.1.1 创建和访问字典 93
7.1.2 各种内置方法 95
7.2 集合:在我的世界里,你就是* 99
7.2.1 创建集合 100
7.2.2 访问集合 101
7.2.3 不可变集合 101
第8章 永久存储 103
视频讲解:68分钟(4个)钟
8.1 文件:因为懂你,所以永恒 103
8.1.1 打开文件 103
8.1.2 文件对象的方法 104
8.1.3 文件的关闭 105
8.1.4 文件的读取和定位 105
8.1.5 文件的写入 106
8.1.6 一个任务 107
8.2 文件系统:介绍一个高大上的东西 109
8.3 pickle:腌制一缸美味的泡菜 115
第9章 异常处理 117
视频讲解:38分钟(3个)钟
9.1 你不可能总是对的 117
9.2 try-except语句 120
9.3 try-finally语句 122
9.4 raise语句 122
9.5 丰富的else语句 123
9.6 简洁的with语句 124
第10章 图形用户界面入门 126
视频讲解:14分钟(1个)钟
10.1 安装EasyGui 126
10.1.1 导入EasyGui 127
10.1.2 快速入门 127
10.1.3 各种功能演示 129
10.2 默认参数和关键字参数 130
10.3 使用按钮组件 131
10.4 如何在buttonbox里边显示图片 132
10.5 为用户提供一系列选项 133
10.6 让用户输入消息 134
10.7 让用户输入密码 137
10.8 显示文本 138
10.9 目录与文件 139
10.10 捕获异常 140
10.11 记住用户的设置 141
第11章 类和对象 143
视频讲解:78分钟(5个)钟
11.1 给大家介绍对象 143
11.2 对象=属性 方法 143
11.3 面向对象编程 145
11.3.1 self是什么 145
11.3.2 听说过Python的魔法方法吗 146
11.3.3 公有和私有 146
11.4 继承 148
11.4.1 调用未绑定的父类方法 150
11.4.2 使用super函数 151
11.5 多重继承 151
11.6 组合 152
11.7 类、类对象和实例对象 153
11.8 到底什么是绑定 154
11.9 一些相关的BIF 156
第12章 魔法方法 160
视频讲解:140分钟(9个)钟
12.1 构造和析构 160
12.1.1 _?_init_?_(self[, ...]) 160
12.1.2 _?_new_?_(cls[, ...]) 161
12.1.3 _?_del_?_(self) 162
12.2 算术运算 163
12.2.1 常见的算术运算 163
12.2.2 反运算 166
12.2.3 一元操作符 167
12.3 简单定制 167
12.4 属性访问 173
12.5 描述符(property的原理) 177
12.6 定制序列 180
12.7 迭代器 182
12.8 生成器 185
12.9 生成器表达式 187
第13章 模块 190
视频讲解:36分钟(3个)钟
13.1 模块就是程序 190
13.2 命名空间 191
13.3 导入模块 191
13.4 _?_name_?_='_?_main_?_' 192
13.5 搜索路径 194
13.6 包 195
13.7 像个极客一样去思考 196
第14章 论一只爬虫的自我修养 202
视频讲解:76分钟(4个)钟
14.1 入门 202
14.2 什么是编码 205
14.3 下载一只猫 205
14.4 更好的选择 207
14.4.1 没有对比就没有伤害 207
14.4.2 安装Requests 208
14.4.3 安装BeautifulSoup4 208
14.5 爬取豆瓣Top250电影排行榜 209
14.6 爬取网易云音乐的热门评论 213
第15章 正则表达式 221
视频讲解:55分钟(3个)钟
15.1 re模块 221
15.2 通配符 221
15.3 反斜杠 222
15.4 字符类 223
15.5 重复匹配 223
15.6 特殊符号及用法 225
15.7 元字符 227
15.8 贪婪和非贪婪 229
15.9 反斜杠 普通字母=特殊含义 230
15.10 编译正则表达式 231
15.11 实用的方法 233
第16章 Scrapy爬虫框架 238
视频讲解:56分钟(2个)钟
16.1 环境搭建 238
16.1.1 安装Miniconda 238
16.1.2 安装Scrapy 241
16.2 Scrapy框架架构 241
16.3 创建一个Scrapy项目 243
16.4 编写爬虫 244
16.5 爬 245
16.6 取 246
16.6.1 在Shell中尝试Selector选择器 246
16.6.2 使用XPath选择器 247
16.6.3 使用CSS选择器 248
16.6.4 提取数据 249
16.6.5 在爬虫中提取数据 250
16.7 存储内容 251
16.8 跟进链接 252
第17章 GUI的*终选择:Tkinter 254
视频讲解:295分钟(14个)钟
17.1 Tkinter之初体验 254
17.2 进阶版本 255
17.3 Label组件 258
17.4 Button组件 260
17.5 Checkbutton组件 261
17.6 Radiobutton组件 262
17.7 LabelFrame组件 264
17.8 Entry组件 265
17.9 Listbox组件 272
17.10 Scrollbar组件 275
17.11 Scale组件 276
17.12 Text组件 278
17.12.1 Indexes用法 280
17.12.2 Mark用法 283
17.12.3 Tag用法 285
17.13 Canvas组件 292
17.14 Menu组件 298
17.15 Menubutton组件 302
17.16 OptionMenu组件 303
17.17 Message组件 305
17.18 Spinbox组件 306
17.19 PanedWindow组件 306
17.20 Toplevel组件 309
17.21 事件绑定 311
17.22 事件序列 312
17.22.1 type 313
17.22.2 modifier 314
17.23 Event对象 314
17.24 布局管理器 316
17.24.1 pack 316
17.24.2 grid 318
17.24.3 place 319
17.25 标准对话框 321
17.25.1 messagebox 321
17.25.2 fieldialog 323
17.25.3 colorchooser 324
第18章 Pygame:游戏开发 326
视频讲解:460分钟(19个)钟
18.1 安装Pygame 326
18.2 初步尝试 327
18.3 解惑 330
18.3.1 什么是Surface对象 330
18.3.2 将一个图像绘制到另一个图像上是怎么回事 330
18.3.3 移动图像是怎么回事 330
18.3.4 如何控制游戏的速度 331
18.3.5 Pygame的效率高不高 332
18.3.6 应该从哪里获得帮助 332
18.4 事件 332
18.5 提高游戏的颜值 336
18.5.1 显示模式 336
18.5.2 全屏才是王道 337
18.5.3 使窗口尺寸可变 338
18.5.4 图像的变换 338
18.5.5 裁剪图像 341
18.5.6 转换图片 346
18.5.7 透明度分析 346
18.6 绘制基本图形 351
18.6.1 绘制矩形 351
18.6.2 绘制多边形 352
18.6.3 绘制圆形 353
18.6.4 绘制椭圆形 354
18.6.5 绘制弧线 355
18.6.6 绘制线段 356
18.7 动画精灵 356
18.7.1 创建精灵 358
18.7.2 移动精灵 360
18.8 碰撞检测 361
18.8.1 尝试自己写碰撞检测函数 362
18.8.2 sprite模块提供的碰撞检测函数 365
18.8.3 实现完美碰撞检测 367
18.9 播放声音和音效 367
18.10 响应鼠标 371
18.10.1 设置鼠标的位置 371
18.10.2 自定义鼠标光标 372
18.10.3 让小球响应光标的移动频率 374
18.11 响应键盘 376
18.12 结束游戏 377
18.12.1 发生碰撞后获得随机速度 377
18.12.2 减少“抖动”现象的发生 378
18.12.3 游戏胜利 381
18.12.4 更好地结束游戏 382
18.13 经典飞机大战 389
18.13.1 游戏设定 389
18.13.2 主模块 390
18.13.3 我方飞机 392
18.13.4 响应键盘 393
18.13.5 飞行效果 394
18.13.6 敌方飞机 395
18.13.7 提升敌机速度 396
18.13.8 碰撞检测 398
18.13.9 完美碰撞检测 401
18.13.10 一个BUG 402
18.13.11 发射子弹 403
18.13.12 设置敌机“血槽” 405
18.13.13 中弹效果 406
18.13.14 绘制得分 407
18.13.15 暂停游戏 408
18.13.16 控制难度 409
18.13.17 全屏炸弹 411
18.13.18 发放补给包 412
18.13.19 超级子弹 415
18.13.20 三次机会 417
18.13.21 结束画面 420

【前言】
Life is short. You need Python。
  ——Bruce Eckel
  上边这句话是Python社区的名言,翻译过来就是“人生苦短,我用Python”。
  
  我和Python结缘于一次服务器的调试,从此便一发不可收拾。我从来没有遇到一门编程语言可以如此干净、简洁。使用Python,可以说是很难写出“丑陋”的代码。我从来没想过一门编程语言可以如此简单,它太适合零基础的朋友踏入编程的大门了,如果我有一个八岁的孩子,我一定会毫不犹豫地使用Python引导他学习编程,因为面对它,永远不缺乏乐趣。
  Python虽然简单,其设计却十分严谨。尽管Python可能没有C或C 这类编译型语言运行速度那么快,但是C和C 需要你无时无刻地关注数据类型、内存溢出、边界检查等问题。而Python,它就像一个贴心的仆人,私底下为你都一一处理好,从来不用你操心这些,这让你可以将全部心思放在程序的设计逻辑之上。
  有人说,完成相同的一个任务,使用汇编语言需要1000行代码,使用C语言需要500行,使用Java只需要100行,而使用Python,可能只要20行就可以了。这就是Python,使用它来编程,你可以节约大量编写代码的时间。
  既然Python如此简单,会不会学了之后没什么实际作用呢?事实上并不用担心这个问题,因为Python可以说是一门“万金油”语言,在Web应用开发、系统网络运维、科学与数字计算、3D游戏开发、图形界面开发、网络编程中都有它的身影。目前越来越多的IT企业,在招聘栏中都有“精通Python语言优先考虑”的字样。另外,就连Google都在大规模使用Python。
  好了,我知道过多的溢美之词反而会使大家反感,所以我必须就此打住,剩下的就留给大家自己体验吧。
  
  接下来简单地介绍一下这本书。2016年,出版社的编辑老师无意间看到了我的一个同名的教学视频,建议我以类似的风格写一本书。当时我是受宠若惊的,也很兴奋。刚开始写作就遇到了不小的困难——如何将视频中口语化的描述转变为文字。当然,我希望尽可能地保留原有的幽默和风趣——毕竟学习是要快乐的。这确实需要花不少时间去修改,但我觉得这是值得的。
  本书不假设你拥有任何一方面的编程基础,所以本书不但适合有一定编程基础,想学习Python 3的读者,也适合此前对编程一无所知,但渴望用编程改变世界的朋友!本书提倡理解为主,应用为王。因此,只要有可能,都会通过生动的实例来让大家理解概念。
  编程知识深似海,没办法仅通过一本书将所有的知识都灌输给你,但我能够做到的是培养你对编程的兴趣,提高你编写代码的水平,以及锻炼你的自学能力。
  *后,本书贯彻的核心理念是:实用、好玩、参与。
  
                       小甲鱼
                               2016年7月


【免费在线读】
第3章
成为高手前必须知道的一些基础知识
3.1 变量
  在改进小游戏之前,有些必须掌握的知识需要来讲解一下。
  当为一个值起名字的时候,它将会存储在内存中,我们把这块内存称为变量(variable)。在大多数语言中,把这种行为称为“给变量赋值”或“把值存储在变量中”。
  不过,Python与大多数其他计算机语言的做法稍有不同,它并不是把值存储在变量中,而更像是把名字“贴”在值的上边。所以,有些Python程序员会说Python没有变量,只有名字。变量就是一个名字,通过这个名字,可以找到我们想到的东西。
  看个例子:
  
>>> teacher = "小甲鱼"
>>> print(teacher)
小甲鱼
>>> teacher = "老甲鱼"
>>> print(teacher)
老甲鱼
  
  变量为什么不叫“恒量”而叫“变量”?正是因为它是可变的!再看另一个例子:
  
>>> x = 3
>>> x = 5
>>> y = 8
>>> z = x y
>>> print(z)
13
  
  该例子先创建一个变量,名字叫x,给它初始化赋值为3,然后又给它赋值为5(此时3就被5替换掉);接下来创建另外一个变量y,并初始化赋值为8;*后创建第三个变量z,它的值是变量x和y的和。
  同样的方式也可以运用到字符串中:
  
>>> myteacher = "小甲鱼"
>>> yourteacher = "老甲鱼"
>>> ourteacher = myteacher yourteacher
>>> print(ourteacher)
小甲鱼老甲鱼
  
  这种字符串加字符串的语法,在Python里称为字符串的拼接。

* 在使用变量之前,需要对其先赋值。
* 变量名可以包括字母、数字、下画线,但变量名不能以数字开头,这与大多数高级语言是一样的——受C语言影响,或者说Python这门语言本身就是由C语言写出来的。
* 字母可以是大写或小写,但大、小写是不同的。也就是说,fishc和FishC对于Python来说是完全不同的两个名字。
* 等号(=)是赋值的意思,左边是名字,右边是值,不能写反了。
* 对变量的命名理论上可以取任何合法的名字,但作为一名优秀的程序员,请尽量给变量取一个看起来专业一点儿的名字。
返回顶部