描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302514787
2.注重编程思想的养成,让新手能真正写出代码,而不仅是只能看懂代码。
3.内容丰富,涵盖图形用户界面开发、网络编程、多线程、正则表达式、大数据和机器学习等。
4.全书配套高品质视频和书籍相辅相成,让读者能够更直观的看到作者的演示和讲解。
5.扫描书中二维码即可直接观看配套高品质视频教程,提供全部源代码下载,线上QQ群互动学习,学习形式更多样。
本书通过丰富的案例和真切的经验分享、详细的文字讲解和生动的在线视频演示,给读者带来别样的学习体验。
本书非常适合没有Python编程经验的程序员,也适合工作中需要用到程序解决问题的非专业人员,由于独特的编排和讲解,同样适合初学Python的学生,甚至可以当作全国计算机二级Python的教材使用。总之,对于*次接触编程的人来说,这是一本非常适合的书。
第0章从零开始3
0.1克服编程恐惧3
0.2如何写出好程序4
0.3为什么选择Python5
0.4Python的发展和应用6
0.5一些建议8
0.6多平台搭建Python开发环境10
0.6.1什么是开发环境10
0.6.2获得Python安装包11
0.6.3安装Python12
0.7命令行模式及Python的第一次运行13
第1章开始编程19
1.1第一个程序的诞生19
1.1.1编程动机19
1.1.2神奇的导入: import19
1.1.3画一个五角星21
1.1.4Python对话22
1.1.5编写程序23
1.2熟悉开发环境,提高编程效率25
1.3Python开发工具25
1.4第三方模块和工具管理26
1.5像程序员一样写代码28
1.5.1注释28
1.5.2模块导入33〖1〗〖2〗Python快速入门精讲目录1.5.3表达式和语句33
1.5.4合理利用空白33
第2章程序员基础38
2.1程序开发全局观38
2.2数据的标签:变量40
2.2.1声明变量40
2.2.2变量名和值的关系42
2.3编写可以跟用户互动的程序:输入、处理和输出44
2.4快速理解对象和类型:数字和字符串46
2.5运算符和表达式47
2.5.1算术运算符47
2.5.2赋值运算符48
2.5.3比较运算符49
2.5.4逻辑运算符和布尔值49
2.5.5成员运算符49
2.5.6其他运算符50
2.5.7运算符优先级50
2.6如何快速获取帮助51
2.7彩蛋:打印正弦波52
第3章搞定字符串55
3.1字符串的基本定义55
3.1.1转义字符56
3.1.2Docstring57
3.1.3原始字符串57
3.1.4Unicode字符串58
3.2序列58
3.2.1索引58
3.2.2切片59
3.3与字符串相关的运算符60
3.3.1拼接和重复60
3.3.2比较运算符61
3.3.3成员判断62
3.4灵活多变的字符串操作63
3.4.1函数63
3.4.2对象和方法63
3.4.3分割和拼接66
3.4.4字符串模块67
3.5字符串格式化68
3.6遍历字符串70
第4章流程控制72
4.1让程序变智能的分支结构:if语句73
4.1.1if语法结构73
4.1.2布尔值与if75
4.1.3逻辑运算符与if76
4.2条件循环:while语句77
4.2.1while语句77
4.2.2while…else语句79
4.2.3死循环和break80
4.2.4确定次数的循环80
4.3迭代循环:for语句81
4.3.1容器和迭代器82
4.3.2实例:斐波那契数列84
4.3.3循环嵌套85
4.3.4循环控制continue85
第5章列表和元组87
5.1《英雄无敌》迭代开发:构建英雄世界87
5.2程序中的数据仓库:列表88
5.2.1创建列表88
5.2.2列表拆分89
5.3列表的序列化操作89
5.3.1索引和切片89
5.3.2运算符及函数90
5.3.3遍历91
5.4列表的操作92
5.4.1可变的列表92
5.4.2列表的方法93
5.4.3字符串和列表94
5.5Python的魔术94
5.5.1列表推导式95
5.5.2生成器表达式95
5.5.3一点建议96
5.6深拷贝、浅拷贝96
5.6.1赋值96
5.6.2浅拷贝98
5.6.3深拷贝99
5.7不可变的列表——元组100
5.7.1创建元组100
5.7.2元组赋值101
5.7.3列表和元组101
5.7.4什么时候使用元组102
5.8《英雄无敌》需求落地102
第6章分治策略——函数与模块105
6.1函数基础105
6.1.1自定义函数105
6.1.2形参和实参106
6.1.3返回值107
6.2变量作用域108
6.2.1局部变量108
6.2.2全局变量109
6.2.3命名空间109
6.3参数的类型110
6.3.1默认参数110
6.3.2关键参数110
6.3.3冗余参数处理111
6.3.4序列和字典做实参112
6.4内建函数112
6.5匿名函数:lambda表达式114
6.6生成器yield语句115
6.7模块和包116
6.7.1模块117
6.7.2导入模块117
6.7.3搜索路径118
6.7.4包118
6.7.5__name__属性119
第7章字典和集合121
7.1字典121
7.1.1创建字典121
7.1.2字典的键和值122
7.1.3字典的相关操作122
7.1.4字典的方法123
7.2字典实例:统计高频词124
7.3字典的妙用125
7.4集合126
7.4.1Python集合126
7.4.2集合的方法和应用127
进阶应用篇
第8章文件和数据持久化133
8.1文件读取133
8.2文件写入136
8.3文件内的指针137
8.4文件关闭138
8.5文件名和路径138
8.6os模块140
8.7捕获异常141
8.8数据序列化142
8.8.1pickle模块142
8.8.2json模块143
8.9CSV文件144
8.9.1CSV模块144
8.9.2CSV 读写145
第9章面向对象148
9.1从《英雄无敌》开始认识对象148
9.2从面向过程到面向对象150
9.3类和对象151
9.4属性和方法152
9.4.1类的属性153
9.4.2类的方法154
9.4.3内置属性和方法155
9.5类的继承156
9.5.1使用继承156
9.5.2重载158
9.6多态160
9.7内置装饰器160
9.8《英雄无敌》面向对象设计162
第10章异常处理165
10.1异常165
10.2Python的异常类166
10.3捕获和处理异常167
10.3.1try…except…语句167
10.3.2try…except…else语句168
10.3.3finally子句以及嵌套169
10.3.4谁都跑不了169
10.4抛出异常170
10.4.1raise语句170
10.4.2自定义异常类171
10.4.3assert语句171
第11章开发图形用户界面173
11.1GUI173
11.2tkinter174
11.2.1创建空白窗口174
11.2.2添加组件175
11.2.3事件绑定176
11.2.4其他组件176
11.3wxPython177
11.3.1子类化开发: 空白窗口178
11.3.2添加组件及窗口布局179
11.3.3事件绑定182
11.3.4布局管理器184
11.4GUI可视化构建工具:用wxFormBuilder开发GUI程序187
11.5生成可执行的二进制文件193
第12章Python玩转数据库195
12.1数据库初始195
12.2SQLite数据库196
12.3Python连接MySQL198
第13章分身有术:多线程编程201
13.1进程与线程201
13.2多线程202
13.2.1创建线程202
13.2.2线程对象的方法204
13.2.3线程锁205
13.2.4多线程的本质207
13.3实例:批量主机扫描207
第14章网络应用编程210
14.1网络应用开发210
14.2socket编程211
14.2.1socket连接过程211
14.2.2创建socket对象212
14.2.3基于TCP的客户端和服务端213
14.2.4基于UDP实现多线程收发消息215
14.3实例:局域网聊天室216
14.3.1需求分析216
14.3.2概要设计217
14.3.3详细设计217
14.3.4编码阶段219
第15章正则表达式225
15.1正则表达式的常用字符225
15.1.1普通字符225
15.1.2元字符226
15.2Python中的re模块229
15.2.1正则表达式主要功能229
15.2.2re模块使用的两种形式229
15.2.3re常用函数及方法229
15.3实例:一只小爬虫232
拓展案例篇
第16章小白也玩大数据241
16.1好玩的大数据241
16.2大数据技术242
16.3MapReduce模型243
16.4案例:实现MapReduce模型243
16.4.1案例设计243
16.4.2分割文件243
16.4.3编写map函数244
16.5彩蛋:词云249
第17章语音识别技术252
17.1选择语音识别包252
17.2speech模块253
17.2.1语音识别开发环境搭建253
17.2.2环境配置和调试254
17.2.3文字和声音相互转化255
17.2.4speech模块的其他方法256
第18章六行代码入门机器学习257
18.1人工智能发展简史257
18.2机器学习初体验:搭建机器学习环境258
18.3机器学习的过程260
18.3.1收集训练数据260
18.3.2训练分类器并做出预测261
参考文献263
读者还会发现本书在介绍一些基础知识的时候,会有一些“废话”。对于有编程经验的人来讲,确实是废话;而对于一个新手来讲,我希望这些“废话”是一个过来人的经验分享,就好像有个老师在你面前娓娓道来,而不是几句话就涵盖很多的概念和知识点,让新手可能想破头也想不通这里面的来龙去脉。我希望通过这样的方式能够帮助新手树立正确的编程观念,继而产生潜移默化的影响。
至于这本书,我希望它是一个指引,而不是什么宝典大全。当读过之后,我希望读者能脱离这本书,形成自己的思维方式和解决问题的方法,而不是总来翻这本书寻找答案。书中不单讲解语言本身,更是注重培养读者的编程意识,通过经验的分享和抛出问题的方式培养读者独立探索和解决新问题的能力,这也是一个合格的程序员所需要具备的素质。
适合读者
零基础的初学者。
掌握其他语言的程序员。
需要编程解决问题的运维工程师。
工作中需要用到程序解决问题的非计算机领域工作者。
编程爱好者。
本科及大专在校学生。
想要报考全国计算机等级考试的读者。
如何学习本书
本书共3篇18章,分别为基础入门篇、进阶应用篇和拓展案例篇。
基础入门篇为第0章至第7章,内容从克服编程恐惧开始,逐步渗透编程思想,建立编程的信心。知识从Python安装开始,以合理的递进式知识结构编排,介绍了Python的数据类型、语句语法以及函数和模块化编程,每个章节的重要知识点都配备了生动的教学视频,可以采取文字和视频同步学习的方式,能更快、更好地吸收新知识。
进阶应用篇为第8章至第15章,主要介绍文件和数据持久化、面向对象编程、异常处理、开发图形用户界面、正则表达式以及爬虫入门、多线程编程和网络应用编程等相关实用技能,在其中还适当穿插了一些自学任务。通过这部分学习,可以让读者对Python的应用有更多了解,增强自学能力,达到学一通三的效果,从而可以在自己的实际工作中快速学习Python相关的、新的模块和功能并加以应用。各章节均配备了视频教程。
拓展案例篇是第16章至第18章,每章通过一个案例讲解某一个领域的应用。因为Python的特殊性,Python在很多领域都有所应用,作为新手可能没办法在短时间内精通Python在所有领域的应用。这里选取了三个案例,分别是大数据、语音识别和机器学习入门,每个案例都可以帮助新手对相关领域快速了解并入门,如果对哪个方面感兴趣,或者在工作中有需要,可以再深入进行学习研究,这几个案例都是非常好的入门指南。
另外,在本书中还有一些特别的设计,比如,在基础入门和进阶应用部分有一个叫《英雄无敌》的游戏项目,这其实并不是教你开发游戏的教程,只是通过一种载体让那些看起来无关的语法或者功能有一个有机的结合,对零散知识点与程序设计有一个系统的认知。随着学习的深入,你可以让游戏的功能越来越完善,甚至超出书中的设计,这个游戏可以从最简单的文字形式发展成游戏界面;从单纯的文字到具备复杂故事情节;可以从单机到网络。总之,只要你学了新的知识就可以想想这个功能可以在游戏中用来干什么。在书里很多地方我都做了引导,如果你有想法,就去实现吧!
在本书的“动动手”部分也留了一些开放式的问题,需要自己去考虑和设计,有些做了视频演示,如果想不通,也可以到QQ交流群中跟大家进行探讨。
至于实验环境,书中主要的案例都是基于Python 3 Windows 10的环境,个别拓展内容会涉及Linux和Python 2,不过请放心,一定会在你的理解范围内。
相关资源
最后,希望大家在提到本书时,不会说这是一本Python编程的宝典,我希望大家会说这是一本武功心法。看完之后,醍醐灌顶,打通了任督二脉,内功深厚,哈哈。
邹琪鲜 2019年1月
搞定字符串
字符串是编程语言中用到最多的数据类型,许多实际问题的处理,最后都变成了字符串的问题。以《英雄无敌》为例,作为一个纯文字的游戏,若想让开场有些气势,运行的过程中更生动有趣,都需要围绕字符串来做文章。其他诸如网络数据传输、传递网址、发微博等,只要跟数据有关的基本都与字符串相关。
例如怎么实现图31所示的互动效果?#号的方框是怎么出来的?
图31互动效果
代码如下。print(“############################# “)
print(“# welcome to milo’s tool box# “)
print(“# 1 : ls # “)
print(“# 2 : free # “)
print(“# 3 : quit # “)
print(“############################# “)
上述代码可以实现图31的效果,但不止于此,关于字符串可以研究的太多了。接下来我们将介绍关于字符串的知识。
3.1字符串的基本定义
字符串定义和操作
字符串是一个序列,程序语言中认为可以打印的字符序列就是字符串。这个序列不一定是一个单词,它可以是一串密码123456、一个网址,甚至是任意的组合,比如abc、一篇完整的博客或者一个程序的所有源代码。
在Python中构建一个字符串,或者定义一个字符串有两种方法。〖1〗〖2〗Python快速入门精讲第3章搞定字符串一种是通过内建函数str()生成, str()实际是类型内置函数,与整数int()一样,用法如下。>>> s = 123
>>> type(s)
>>> s s
246
>>> s = str(s)
>>> type(s)
>>> s s
‘123123’
另一种更常用、也最直接的方法是通过引号定义,单、双引号都可以,只要成对出现就行,用法如下。>>> h = “hello”
>>> w = ‘world’
>>> hw = ‘hello world”# 错误用法
Python对字符串的单、双引号没有要求,但实际上双引号用起来会更方便一些,比如 “let’s go”,如果使用单引号则需要对字符串中的单引号做转义处理’let’s go’。
3.1.1转义字符
在引号前加 ,可将其后的符号转为普通字符处理,转义字符不会计入字符串,即打印 ‘let’s go’的效果是这样的: >>> print(‘lets go’)
let’s go
利用转义字符可以实现更多的打印效果,表31为Python中的转义字符。表31转义字符
转义字符描述转义字符描述(在行尾时)续行符反斜杠符号’单引号”双引号a响铃b退格(Backspace)e转义000空n换行v纵向制表符t横向制表符r回车f换页oyy八进制数,yy代表的字符,例如,o12代表换行xyy十六进制数,yy代表的字符,例如,x0a代表换行other其他字符以普通格式输出有了转义字符就可以打印这样的内容: >>> say = “tom: “let’s go ! ” njerry:’ok’ “
>>> print(say)
tom: “let’s go ! ”
jerry:’ok’
3.1.2Docstring
通过转义字符可以控制输出的样式,但是并不方便,试想要给一大段文章添加转义字符,那是很辛苦的。幸好在Python中还有一种选择,就是Docstring,三种引号定义字符串。
通过一对三个单引号或者双引号定义字符串,效果即在编码时看到的就是输出效果,而不必再使用转义字符。前面例子的字符串可以这样定义: >>> say = “””tom: “let’s go!”
jerry:”ok” “””
>>> print(say)
tom: “let’s go!”
jerry:”ok”
>>> say
‘tom: “let’s go!”njerry:”ok” ‘
这里我们在定义字符串时就是按照显示的状态编写的,输出时保持了一样的效果,并没有使用转义字符,但实际在保存时,输入的回车、缩进等都会以转义字符的形式被保存下来。
三引号的好处除了可以让代码看起来更整洁以外,另外一个作用就是在前面讲注释时所提到的作用: 可以通过三引号对程序做注释。
3.1.3原始字符串
通过三引号字符配合可以定义出想要的字符串,不过有时我们希望转义字符被当作普通符号出现而不具备特殊含义,则需要将字符串定义为原始字符串,否则就很麻烦。我们在定义正则表达式时经常使用原始字符串,方法就是在字符串前加字母r,用法如下。>>> s = “a n b”
>>> print(s)
a
b
>>> s = “a n b”# 转义转义字符,多的时候操作不便
>>> print(s)
a n b
>>> s = r”a n b”# 定义原始字符串
>>> print(s)
a n b
3.1.4Unicode字符串
字符串中如果含有中文,特别是不同的系统采用不同的中文编码,如果不是Unicode编码,也会比较麻烦,可能需要一次取两个或三个字符才能显示一个中文。所以如果涉及中文,建议将字符串定义为Unicode字符串,只需要在字符串前加U或u,用法如下。>>> hw = u”你好 hello”
>>> hw[0]
‘你’
3.2序列
字符串——分片和索引
字符串当中的字符是有序排列且顺序不可变的,其中每个字符对象都可以通过索引单独获取。同样具有这种特性的还有列表和元组,只是对象从字符串变成了更丰富的形式。我们先通过字符串讲解一下序列的特性和基本操作,列表和元组操作方法相同。
3.2.1索引
索引(见图32)可以理解为字符串中每个字符的编号,正序是从左到右,起始数字为0;倒序是从右向左,起始数字为-1。PYTHON012345-6-5-4-3-2-1图32索引获取字符串内元素的方式: 字符串对象后加方括号,方括号内加索引,用法如下。>>> s = “PYTHON”
>>> s[0]
‘P’
>>> s[3]
‘H’
>>> s[- 1]
‘N’
>>> s[- 6]
‘P’
>>> s[- 7]# 索引越界
Traceback (most recent call last):
File ” “, line 1, in
s[- 7]
IndexError: string index out of range
>>> s[6]
Traceback (most recent call last):
File ” “, line 1, in # 出错代码位置
s[6]
IndexError: string index out of range# 异常类型及提示信息
需要注意的是索引越界问题,超出索引界限就会抛出异常。这是本书讲解中第一次遇到异常,可能在前面的练习中你也遇到过,通常重要信息就是最后一行的异常类型和出错代码位置。通过异常信息,大多数时候我们可以很方便地找到问题所在。
注意: 你可以在开始学习时试着记下这些异常类型,见得多了你就会发现,翻来覆去的就是那几个类型。异常是计算机跟你对话的途径,能够帮你快速发现问题,具体可以看第10章异常处理。
3.2.2切片
切片也叫分片,功能相当强大,用于截取某个范围内的元素,通过[起始值: 结束值]来指定起止区间(左闭右开区间,包含左侧索引值对应的元素,但不包含右侧索引值对应的元素)。这种切片操作很多时候会节省大量的代码,而且很方便,比如从一个长字符串中获取一个单词,用法如下。>>> hw = “hello world”
>>> hw[0:5]
‘hello’
>>> hw[:5]
‘hello’
>>> hw[6:11]
‘world’
>>> hw[6:]
‘world’
上述例子中如果不指定起始值,则切片会取到起始位置;如果不指定结束值,则切片会取到结束位置。若都不指定,你自己试一下: >>> hw[:]# 试一下,自己看结果吧
除了正向切片,负数的反向切片一样可以,上面的例子就变成: >>> hw = “hello world”
>>> hw[-11:-6]
‘hello’
>>> hw[:-6]
‘hello’>>> hw[-5:-1] # 这个取不到结尾,想想为什么?-1换成0呢?
‘worl’
在切片时加入第三个参数,作用是指定步长值,默认是1,即前面的例子中没有指定步长值,步长值就都是1。用法为[起始值: 结束值: 步长值]:
评论
还没有评论。