Python快速入门精讲
出版时间 2019-03-01T00:00
Python
87476
作者简介
邹琪鲜(Milo),13年的编程教学经验,国内最早通过免费视频的方式普及和传播Python的传道者。从2013年起陆续在百度、网易云课堂等平台发布了数百个Python专题视频,包括《疯狂的Python》和《全能的Python:极客编程》等成套的视频课程,全网超过40万人通过作者的视频课程入门并掌握了Python。
内容简介
第3章
搞定字符串
字符串是编程语言中用到最多的数据类型,许多实际问题的处理,最后都变成了字符串的问题。以《英雄无敌》为例,作为一个纯文字的游戏,若想让开场有些气势,运行的过程中更生动有趣,都需要围绕字符串来做文章。其他诸如网络数据传输、传递网址、发微博等,只要跟数据有关的基本都与字符串相关。
例如怎么实现图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。用法为[起始值: 结束值: 步长值]:
1.超精细讲解+视频+丰富的案例和练习,引导初学者快速入门。
2.注重编程思想的养成,让新手能真正写出代码,而不仅是只能看懂代码。
3.内容丰富,涵盖图形用户界面开发、网络编程、多线程、正则表达式、大数据和机器学习等。
4.全书配套高品质视频和书籍相辅相成,让读者能够更直观的看到作者的演示和讲解。
5.扫描书中二维码即可直接观看配套高品质视频教程,提供全部源代码下载,线上QQ群互动学习,学习形式更多样。