小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松、愉快中学会Python!
本书提倡理解为主,应用为王。因此,只要有可能,小甲鱼(注:作者)都会通过生动的实例来让大家理解概念。
虽然这是一本入门书籍,但本书的“野心”并不止于“初级水平”的教学。本书前半部分首先讲解基础的Python 3语法知识,包括列表、元组、字符串、字典以及各种语句;之后循序渐进地介绍一些相对不错的主题,包括抽象、异常、魔法方法以及属性迭代器。后半部分则围绕着Python 3在爬虫、界面开发和游戏开发上的应用,通过实例引导读者进行深入学习和探究,既富有乐趣,又锻炼了读者的动手能力。
本书适合学习Python 3的入门读者,也适合对编程一无所知,但渴望用编程改变世界的朋友们。
章 就这么愉快地开始吧1
视频讲解:13分钟(1个)钟
1.1 获得Python1
1.2 从IDLE启动Python2
1.3 失败的尝试3
1.4 尝试点儿新的东西3
1.5 为什么会这样4
第2章 用Python设计个游戏5
视频讲解:24分钟(1个)钟
2.1 个小游戏5
2.2 缩进6
2.3 BIF7
第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 lambda80
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
0章 图形用户界面入门126
视频讲解:14分钟(1个)钟
10.1 安装EasyGui126
10.1.1 导入EasyGui127
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
1章 类和对象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 一些相关的BIF156
2章 魔法方法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
3章 模块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
4章 论一只爬虫的自我修养202
视频讲解:76分钟(4个)钟
14.1 入门202
14.2 什么是编码205
14.3 下载一只猫205
14.4 更好的选择207
14.4.1 没有对比就没有伤害207
14.4.2 安装Requests208
14.4.3 安装BeautifulSoup4208
14.5 爬取豆瓣Top250电影排行榜209
14.6 爬取网易云音乐的热门评论213
5章 正则表达式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
6章 Scrapy爬虫框架238
视频讲解:56分钟(2个)钟
16.1 环境搭建238
16.1.1 安装Miniconda238
16.1.2 安装Scrapy241
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
7章 GUI的最终选择:Tkinter254
视频讲解: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 type313
17.22.2 modifier314
17.23 Event对象314
17.24 布局管理器316
17.24.1 pack316
17.24.2 grid318
17.24.3 place319
17.25 标准对话框321
17.25.1 messagebox321
17.25.2 fieldialog323
17.25.3 colorchooser324
8章 Pygame:游戏开发326
视频讲解:460分钟(19个)钟
18.1 安装Pygame326
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 一个BUG402
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
第5章
列表、元组和字符串
5.1 列表:一个“打了激素”的数组
有时候可能需要将一些相互之间有关联的数据保存到一起,很多接触过编程的读者脑海里浮现出来的个概念应该就是数组。数组允许把一些相同类型的数据挨个儿摆在一起,然后通过下标进行索引。
Python也有类似数组的东西,不过更为强大。由于Python的变量没有数据类型,所以Python的“数组”可以同时存放不同类型的变量。这么厉害的东西,Python将其称为列表,姑且可以认为列表就是一个“打了激素”的数组。
5.1.1 创建列表
创建一个列表很好简单,只需要使用中括号将数据包裹起来(数据之间用逗号分隔)就可以了。
>>> [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
上面创建了一个匿名的列表,因为没有名字,所以创建完也没办法再次使用它。为了可以随时对它进行引用和修改,可以给它贴上一个变量名:
>>> number = [1, 2, 3, 4, 5]
>>> type(number)
>>> for each in number:
print(each)
1
2
3
4
5
type()函数用于返回指定参数的类型,list即列表的意思。
没有哪一项规定要求Python的列表保存同一类型的数据,因此,它支持将各种不同的数据存放到一起:
>>> mix = [520, "小甲鱼", 3.14, [1, 2, 3]]
可以看到这个列表里有整型、字符串、浮点型数据,甚至还可以包含另一个列表。
当实在想不到要往列表里面塞什么数据的时候,可以先创建一个空列表:
>>> empty = []
时光荏苒,一晃间,距离《零基础入门学习Python》出版(2016年11月)已经过去两年多了,在这段时间里,Python逐步走入了大家的视野,这门语言因其简洁的语法风格,在云计算、金融分析、人工智能、科学运算和自动化运维等领域上都有很好的应用,所以被越来越多的人所认识和接受,其使用率得到了大幅度的提升。
《零基础入门学习Python》一经出版便受到了广大读者的欢迎,累计销售13万册,在出版后两年多的时间里,收到了很多读者朋友们的反馈,大部分的读者朋友给予了很高的评价,小甲鱼在此由衷地感谢大家。同时,也注意到朋友们提出的一些疑问、意见和建议。因此,在第2版中,小甲鱼对所使用的Python版本进行了更新(Python 3.7);对书中存在的不足进行了弥补;引入了更多有趣的案例;添加了更多实用的模块讲解等。
本书更新和改进内容
(1)所有案例均使用Python 3.7版本代替了原来的Python 3.3,改写了大部分知识点的例子,使读者学习起来更富有趣味性。
(2)考虑到现实中的开发场景,增加了一些案例:
* 在爬虫案例部分引入了流行的Request模块;
* 增加了“爬取豆瓣Top250电影排行榜”和“爬取网易云音乐的热门评论”案例;
* Scrapy爬虫框架部分,采用了Anaconda来安装Scrapy,使用Scrapy 1.5.0版本进行演示。
(3)考虑到“正则表达式”和“Scrapy爬虫框架”在实际开发中的应用非常广泛,将其从版中的4章(论一只爬虫的自我修养)中独立出来,添加了更多的示例,使得内容更为翔实、丰富。
(4)修改了版中的一些差错,在此要再次感谢各位读者提出的疑问,使 小甲鱼能够发现书中的不足之处。
本书配套资源和网站支持
* PPT课件请在清华大学出版社网站本书页面下载。
* 程序源代码和小甲鱼精心录制的94集(1800分钟)视频教程,请扫描书中对应二维码获取。
注意:书中给出了下载程序源代码的二维码和视频观看二维码,请先扫描封四刮刮卡中的二维码进行注册(每个刮刮卡只能注册一个用户),之后再扫描相关二维码即可获得配套资源。
* 同时,对于书中没有展开详述的内容提供了【扩展阅读】,读者可访问书中的相关网址或扫描对应位置的二维码进行阅读。部分原创的内容并不是免费提供的,读者可自行选择进行购买阅读。
* 本书还提供了额外的配套课后作业,如有需要,请在鱼C论坛(https: //fishc.com.cn)或联系鱼C工作室的小客服(https://fishc.taobao.com)购买 学习。
* 如果在学习中遇到困难,可以到鱼C论坛或关注鱼C工作室微信公众号获取相关知识,与各位网友们相互交流和讨论。论坛中的提问互助具有知识累积的特点,因为初学者很多问题是一样的,所以不妨在提问之前先在论坛搜索一下相关的关键词,一般都可以找到答案。
由于小甲鱼的水平有限,书中难免有一些错误和不准确的地方,恳请各位读者不吝指正,有兴趣的读者可发送邮件至[email protected],期待收到大家的意见和建议。
鱼C工作室微信公众号 本书源代码和安装包下载
我们一直在努力耕耘这么一片简单的土壤,虽然没有达到尽善尽美,但在大家的努力下,已初见雏形,并且在论坛上已经聚拢了很多超厉害的“大牛”!
Fake it till they make it —— 假装直到真的成功。
最后还是那句话,小甲鱼渴望和大家一起成长,十年前我们仰望星空,十年后我们将俯视大地。未来的天空,必将为我们留下一片灿烂的曙光!
小甲鱼
2019年3月