版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计及上机实验PythonPython字符串类型第4章4.1字符串的编码方式4.2字符串的表示形式4.3特殊字符和字符转义4.4原始字符串4.5字符串的索引和切片4.6字符串的拼接4.7字符串的基本操作符4.8字符串处理的常用操作4.9字符串的格式化4.10Python的内建字符串(str)方法4.11案例实战字符串的编码方式字符串的定义字符串的基本运算符操作字符串的常用方法字符串的格式化本章重点字符串的查找、索引、取长度、统计、替换和分割字符串的格式化本章难点
字符串的编码方式4.1字符串是一种有序字符的集合,用于表示文本数据。字符串可以包含零个、一个或者多个字符。字符串使用单引号(‘’)、双引号("")或三引号(''''''、"""""")作为其界定符。字符串可以使用ASCII字符、Unicode字符以及各种符号。常见的编码格式有ASCII、UTF-8、Unicode、UTF-16、UTF-32、GB2312、GBK、CP936、base64、CP437等。不同编码格式之间相差很大,采用不同的编码格式意味着不同的表示和存储形式,把同一字符存入文件时,写入的内容可能会不同,在读取其内容时必须要知道编码规则并进行正确的解码。1.ASCII美国国家标准协会制定的ASCII(美国信息交换标准代码)是最通用的单字节编码格式,主要用于显示英语。ASCII编码使用7位表示一个字符,共128个字符。它最大的缺点是字符集太小,只能用于英文。2.GB2312GB2312是我国制定的简体中文编码格式,使用1个字节表示英文,2个字节表示中文。GBK是GB2312的扩充,而CP936是微软在GBK基础上开发的编码方式。GB2312、GBK和CP936都使用2个字节表示中文。
字符串的编码方式4.13.UnicodeUnicode编码完美地解决了多编码标准的混乱问题,它是全球文字的统一编码(例如基本汉字的Unicode编码从0x4E00到0x9FA5)。它为世界上各种文字的每个字符规定了一个唯一的编码,它可以实现跨语种、跨平台的应用。由于Unicode的一个字符会占用多个字节,如果文本中的内容基本上是英文,则使用Unicode编码会比ASCII编码占用更大的存储空间。本着节约存储空间的原则,又出现了基于Unicode字符集的可变长编码方案UTF-8。4.UTF-8UTF-8对全世界所有国家需要用到的字符进行了编码规则设计,是Unicode编码的具体存储实现。它以1个字节表示英语字符(兼容ASCII)。以3个字节表示中文,还有些语言的符号使用2个字(例如俄语和希腊语符号)或4个字节。
字符串的编码方式4.1Python3完全支持中文字符,默认使用UTF-8编码格式,无论是一个数字、英文字母,还是一个汉字,在统计字符中长度时都按一个字符对待和处理。字符串中的decode()函数是以encoding指定的编码格式解码字符串,encode()函数是以encoding指定的编码格式编码字符串,其具体参数和用法可以看考表4-10。
字符串的编码方式4.1
字符串的编码方式4.1例4-1
字符串编码解码实例>>>'python很流行'.encode('utf8')#采用UT-8编码格式进行字符编码b'python\xe5\xbe\x88\xe6\xb5\x81\xe8\xa1\x8c'#输出格式为字节编码>>>'python语言'.encode("gb2312")#采用gb2312编码格式进行字符编码b’python\xd3\xef\xd1\xd4’#输出格式为字节编码>>>’python语言’.encode(‘gb2312’).decode(‘utf8’)#编码和解码格式不一致,导致错误Traceback(mostrecentcalllast)UnicodeDecodeError:utf-8codecan’tdecodebyte0xd3inposition6:invalidcontinuationbyte>>>'python语言'.encode('gb2312').decode('gb2312')'python语言'#编码和解码格式一致,正确显示内容>>>len(‘python语言’)#求字符串长度,中文字符和英文字符都算1个8
字符串的编码方式4.1>>>s=“hello”>>>s[0]=“w”#字符串是不可变序列,不允许直接修改其值Traceback(mostrecentcalllast):TypeError:’str’objectdoesnotsupportitemassignment>>>id(s)45901000>>>s=“python“#修改字符串变量的值会导致重建一个对象>>>id(s)30758648字符串属于不可变序列,这意味着不可以直接修改字符串的值。例4-2
修改字符串值实例字符串的表示形式4.2字符串在Python中是十分重要的类型,一般用引号中间添加字符的形式表示。不同于其他语言,Python中双引号("")与单引号(‘’)是不加区分的,都可以用来表示字符串。字符中有以下三种表示方式。1.使用单引号(‘’)包含字符单引号使用示例如下:‘Python'‘abc’‘中国’注意:单引号表示的字符串里面不能包含单引号,比如Let'sgo不能使用单引号包含。2.使用双引号("")包含字符双引号使用示例如下:“PyCharm”“ABC”“北京”注意:双引号表示的字符中里面不能包含双引号,并且只能有一行。字符串的表示形式4.23.使用三引号(‘‘‘’’’或“““”””)包含字符‘‘‘hello,word!’’’三引号表示的字符串可以跨行,支持排版较为复杂的字符串。注意:包含在一对三引号之间且不属于任何语句的内容,都被解释器认为是注释。三引号使用代码如下:字符串的表示形式4.2注意:Python不支持字符类型。Python采用字符串驻留机制,一般情况下,将短字符串(不多于20个字符)赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。但是长字符串不遵守驻留机制。空字符串表示为‘’或“”单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。‘123’‘“中国年,最西安”活动’“‘Python’语言”在字符串的实际使用过程中,存在一些无法直接显示(打印)的字符,如换行符、水平制表符等,这些符号被称为“特殊字符”。此外,如果在双引号包裹的字符串中必须使用双引号,那么这种情况下双引号也是一种“特殊字符”。为了在字符串中表达这些字符,就需要使用字符转义的形式来书写。字符转义的方法是使用“\”加一些特定的字符。Python中的常用转义字符如表4-1所示。特殊字符和字符转义4.3表4-1常用转义字符特殊字符和字符转义4.3例4-3
通过转义字符完成一个如下图4-1所示界面:图4-1转义字符案例界面分析:要想显示“\\”,则需要用到两个转义字符“\\”和“\\”,要想使用水平制表符,则需用到转义字符“\t”。代码如下:print("---\t欢迎来到Pyhon世界\t---")print("python是一款开源软件,你可以到官网里下载使用")print("python的官网为:","http:\\\\")print("python第三方库的官网为:","http:\\\\")print("---\t希望你使用愉快\t---")特殊字符和字符转义4.3例4-4
转义字符的使用案例,单行展示文本进度条。做一个文本进度条,每次有进度不换行,只是不断地进行本行刷新,用后打印的字符覆盖之前的字符。分析:为了实现单行动态刷新,就需要要求我们的程序在输出某一个字符的字符串的时候,不能够换行到下一行,这时就可以用\r,该转义字符代表的含义是让光标回到行首,进度条按照0%,10%...100%的比例来显示,为了能够清晰的看到每一阶段的进度条,我们可以调用系统标准库time里面的perf_counter()函数来获取当前时间,并调用sleep()函数来延长程序执行的时间,就可以清晰的看到每一个阶段的进度条。注:IDLE不支持\r,因此想看到本程序的效果可以在Anaconda中运行。特殊字符和字符转义4.3importtimescale=10print("执行开始".center(scale+2,"-"))start=time.perf_counter()foriinrange(scale+1):a="*"*ib="."*(scale-i)c=i/scale*100dur=time.perf_counter()-startprint("\r","{}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")time.sleep(1)print("\n"+"执行结束".center(scale+2,"-"))代码如下:执行结果为:----执行开始----0.0%[->..........]0.00s……….100.0%[**********->]10.00s----执行结束----原始字符串4.4对于某些应用场景,比如输入一个文件的路径,其中会有大量的需要转义的字符,如果每一个都要输入“\”就非常麻烦。所以,在Python里引入了原始字符串的概念。所谓原始字符串就是指在字符串前加先导符“r”(也可以是大写的“R”),之后字符串里的所有内容都不会被转义,即把“r”后面的所有字符串都当做普通字符。原始字符串主要用于正则表达式、文件路径或者URL的场合。原始字符串4.4例4-5
原始字符串使用案例>>>path='C:\Windows\twunk.exe'>>>print(path)#字符\t被转义为水平制表符C:\Windows wunk.exe>>>path=r’C:\Windows\twunk.exe’#原始字符串,任何字符都不转义>>>print(path)C:\Windows\twunk.exe字符串的索引和切片4.5字符串的本质是字符的组合,在一个字符串中,每一个组成部分都称为一个字符。图4-2给出了一个包含6个字符的字符串”我们是好朋友”,其中,每个字符所在的位置称为“字符的偏移量”,通过偏移量来查询字符串中指定位置字符的方法称为“索引查询”。在实际操作过程中,我们一般会说索引值为3的字符是”好”字,索引值就是指偏移量。字符串的索引可以分为两种:正向索引和反向索引。4.5.1字符串的索引字符串的索引和切片4.5正向索引指的是符合阅读习惯的索引方式,按照从左至右的顺序。正向索引的开始点是字符串的左边第一个字符,其索引值为0,之后每个字符的索引值依次增加1,正向索引中所有的索引值都是0或正数。假若字符串的长度为L,则正向递增序号为0~L-1,最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1。反向索引是按照从右至左的顺序编号。由于索引值0已经被正向索引使用,为了不产生歧义,反向索引值从-1开始,从右至左依次减1,反向索引所有的索引值都是负数。假若字符串的长度为L,则反向递减序号为-1~-L,最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。字符串的索引和切片4.5在字符串中,使用下标运算符[]来查询指定索引值对应的字符。例4-6
定义一个字符串值为”我们是好朋友”,分别使用下标运算符输出”朋”、”们”、”友”a="我们是好朋友"#使用正向索引print("使用正向索引")print(a[4])print(a[1])print(a[5])#使用反向索引print("使用反向索引")print(a[-2])print(a[-5])print(a[-1])=========RESTART:I://4-5.py========使用正向索引朋们友使用反向索引朋们友字符串的索引和切片4.5字符串的切片操作与列表的对应操作类似,不同点在于返回的是一个字符串而不是列表。由于返回值是原字符串的一部分,所以这里也可以将返回值称为原字符串的“子字符串”,或者简称为“子串”。切片操作的基本方法分为以下三大类。4.5.2字符串的切片1.返回[m:n]的子串如果要返回m~n]之间的子串,可以使用[m:n]的格式。当为正向索引时,m和n均为0或正数,m必须小于n,同时返回的值包含m但不包含n。当为反向索引时,m和n是负数,m必须小于n,同时返回的值同样是包含括m但不包含n。如果使用了错误的索引值,那么系统将返回一个空字符串,而不会提示一个错误或者异常。字符串的索引和切片4.5例4-7
字符串切片操作练习一content="python程序设计基础"#正向切片print("正向切片")print(content[0:5])print(content[3:12])print(content[20:50])#反向切片print("反向切片")print(content[-10:-1])print(content[-15:-5])print(content[-100:-20])=========RESTART:I:4-6.py========正向切片pythohon程序设计基础
#注意,这里是输出空值反向切片thon程序设计基python程
#注意,这里是输出空值字符串的索引和切片4.52.返回[:n]、[m:]和[:]类型的子串如果m和n分别指的是字符串的开头和结尾,那么他们两个的值可以省略。m和n的值省略时可以有如下三种情况:(1)[:n]表示返回从字符串开头到n-1之间的子字符串;(2)[m:]表示返回从m到字符串结尾之间的子字符串;(3)[:]表示返回整个字符串。字符串的索引和切片4.5例4-8
字符串切片操作练习二content="Everybodyshouldlearnhowtoprogramacomputer."#返回前20个字符print(content[:20])#返回第15个字符及后面的所有字符print(content[15:])#返回所有字符print(content[:])Everybodyshouldleadlearnhowtoprogramacomputer.Everybodyshouldlearnhowtoprogramacomputer.字符串的索引和切片4.53.返回[m:n:k]类型的子串
[m:n:k]用于从字符串中索引值为m字符开始,每k个字符取出一次,一直取到n前面的那个字符结束。当k为正值时,表示查询方向为正向索引;当k为负值时,表示查询方向为反向索引。m、n和k的值均可以省略,当省略m时表示从字符串的第一个字符开始索引,当n省略时表示索引到字符串的最后一个字符,当k省略时表示其取值为1。字符串的索引和切片4.5例4-9字符串切片操作练习三content="Everybodyshouldlearnhowtoprogramacomputer."#隔个返回整个字符串的子串#[m:n:k]的应用print(content[::2])print(content[10:20:3])Eeyoysoleroopormacmue.sua执行结果为:字符串的拼接4.6字符串拼接用于将数个短的字符串连接成一个长的字符串。字符串拼接主要有加号连接、%连接、join()函数连接、format()函数连接和格式化字符串等方法。其中,format()函数和格式化字符串将会在4.8节中介绍。字符串的拼接4.61.加号连接所谓“加号连接”是指直接将两个字符串用加号连接在一起。这种方法简单明了,但是效率不高。从其运行原理来说,由于Python的字符串是不可变类型,因此,一个字符串在生成之后如果要修改,就只能新生成一个字符串。对于字符串操作a+b+c+d+e+…而言,在运行时,系统会按照规则先将a和b拼接为一个新字符串,再将新字符串与c拼接成一个新字符串,依次类推。如果有n个字符串拼接,那么中间就会生成n-2个临时字符串,程序员是看不到这些字符串的,但是会消耗内存空间。2.%连接%连接是C语言格式字符串的写法,这种连接方式只需要申请一次内存空间。格式为:“原字符串%s”%”待连接字符串”字符串的索引和切片4.5例4-10%连接示例>>>national="china"#将待连接的字符串定义为一个变量>>>"I'mfrom%s"%national#使用%连接前面的字符串和后面的变量"I'mfromchina">>>"Talkischeap.%s"%"Showmethecode"#直接使用%连接前后字符串'Talkischeap.Showmethecode'字符串的拼接4.63.join()函数连接join()函数连接是一种非常常用的字符串拼接方法,它可以将一个列表拼接为一个字符串,这种方式广泛地用于生成参数表,如生成URL查询字符串。该函数是字符串的成员函数,所以使用时需要以一个字符串为对象,指定的字符串将成为拼接的分隔符。join()方法语法:str.join(sequence)。参数如下:sequence:要连接的元素序列。字符串的拼接4.6例4-11
join()函数连接示例#将列表中的所有元素用逗号拼接>>>",".join(['hello','world','python'])'hello,world,python'字符串的基本操作符4.7Python中,字符串使用的基本操作符如表4-2所示,主要包括“+”、“%”、“*”、“>”、“>=”、“<”、“<=”、“==”、“!=”、in、notin等运算。其中字符串的比较规则如下:(1)两个字符串按照从左到右的顺序逐个字符比较,如果对应的两个字符相同,则继续比较下一个字符。(2)如果找到了两个不同的字符,则具有较大Unicode码对应的字符串具有更大的。(3)如果对应字符都相同且两个字符串长度相同,则两个字符串相等。(4)如果对应字符相同但两个字符串长度不同,则较长字符串具有更大的值。字符串的基本操作符4.7表4-2基本字符串操作符字符串处理的常用操作4.8字符串(str)是Python六大数据类型之一,是在整个程序开发过程中使用最多的基本数据类型。Python中的字符串对象提供了很多方法来操作字符串,功能相对丰富,接下来我们将分别来介绍字符串的各种操作方法。字符串处理的常用操作4.8Python内置的函数eval()主要功能是将一个字符串转换为一个表达式,eval()函数非常有用。4.8.1表达式转换字符串处理的常用操作4.84.8.1表达式转换例4-12通过键盘输入式子(257+325)*78/(78-20),并将该计算结果输出。分析:通过键盘输入的数据均是字符串类型的数据,必须利用Python内置的eval()函数将其转换为表达式后才能参与计算。print("请从键盘上输入表达式(257+325)*78/(78-20)")result=eval(input("请输入:"))print("该式子的计算结果为:",result)========RESTART:I://4-15.py=======请从键盘上输入表达式(257+325)*78/(78-20)请输入:(257+324)*78/(78-20)该式子的计算结果为:781.3448275862069代码为:执行结果为:字符串处理的常用操作4.8统计字符串的长度可以通过Python内置的函数len()来完成。4.8.2字符串长度计算例4-13南唐词人李煜的词《渔夫》是一首描述世外桃源般的快活悠闲生活,请将该首词定义为一个字符串对象,并统计出该首词里有多少个字符。分析:定义字符串对象非常简单,但是如果要定义一个跨行的字符串就需要使用三引号来完成,统计该字符串的长度就使用len()函数。ci='''《渔夫》
阆苑有情千里雪,桃花无言一对春。一壶酒,一竿身,快活如侬有几人?
'''print(ci)print("以上排版好的词共有%d"%len(ci),"个字符")代码为:字符串处理的常用操作4.8创建一个字符串对象时,一对引号里面可以包含任意数量的任意字符,但是如果想具体的检测该字符串里包含什么类型的字符时,可以通过以下11个函数来完成。4.8.3字符串的类型判断1.isalnum()函数isalnum()函数用来判断字符串中是否全为字母或者数字,如果全部为字母或者数字则返回结果为True,否则返回False。2.isalpha()函数isalpha()函数用来判断字符串中是否全为字母,如果全部为字母则返回结果为True,否则返回False。3.isdecimal()函数isdecimal()函数用来判断字符串中是否只包含十进制数字字符,如果只包含十进制数字字符则返回结果为True,否则返回False。4.isdigit()函数isdigit()函数用来判断字符串中是否全为数字(0~9),如果全为数字则返回结果为True,否则返回False。字符串处理的常用操作4.8创建一个字符串对象时,一对引号里面可以包含任意数量的任意字符,但是如果想具体的检测该字符串里包含什么类型的字符时,可以通过以下11个函数来完成。4.8.3字符串的类型判断1.isalnum()函数isalnum()函数用来判断字符串中是否全为字母或者数字,如果全部为字母或者数字则返回结果为True,否则返回False。2.isalpha()函数isalpha()函数用来判断字符串中是否全为字母,如果全部为字母则返回结果为True,否则返回False。3.isdecimal()函数isdecimal()函数用来判断字符串中是否只包含十进制数字字符,如果只包含十进制数字字符则返回结果为True,否则返回False。字符串处理的常用操作4.84.isdigit()函数isdigit()函数用来判断字符串中是否全为数字(0~9),如果全为数字则返回结果为True,否则返回False。5.isidentifier()函数isidentifier()函数用来判断字符串中是否为合法标识,这里的合法标识指Python中定义标识符时的合法字符,具体只能是数字、字母和下划线。如果为合法字符则返回True,否则返回False。6.isupper()函数isupper()函数用来判断字符串中是否全为大写字母,如果全为大写字母则返回True,否则返回False。字符串处理的常用操作4.87.islower()函数islower()函数用来判断字符串中是否全为小写字母,如果全为小写字母则返回True,否则返回False。8.isnumeric()函数isnumeric()函数用来判断字符串中是否只包含数字字符,如果只包含数字字符则返回True,否则返回False。9.isspace()函数isspace()函数用来判断字符串中是否只包含空白字符,如果只包含空白字符则返回True,否则返回False。字符串处理的常用操作4.810.istitle()函数istitle()函数用来判断字符串中是否为标题,即各单词首字母大写,如果是则返回True,否则返回False。11.isprintable()函数isprintable()函数用来判断字符串中是否只包含可打印字符,如果只包含可打印字符则返回True,否则返回False。非打印字符是指回车键”\n”、水平制表符”\t”等。字符串处理的常用操作4.8例4-14输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。importstrings=input("请输入一些字符串:")letters=0space=0digit=0others=0forcins:ifc.isalpha():letters+=1elifc.isspace():space+=1elifc.isdigit():digit+=1else:others+=1print("字母有%d个,空格有%d个,数字有%d个,其他有%d个"%(letters,space,digit,others))字符串处理的常用操作4.8我们可以利用函数将字符串中的字母进行大小写转换,capitalize()将字符串转换为首字母大写,其余小写,lower()将字母串转换为小写字母串;upper()返回大写字符串;title()将字符串中每个单词首字符大写;swapcase()完成大小写互换;casefold()可以将其他语言,如德语等,转换成小写。4.8.4字符串的大小写转换字符串处理的常用操作4.84.8.4字符串的大小写转换strings="HelloPython,Helloworld"print(strings.lower())运行结果如下:hellopython,helloworld例4-15将字符串“HelloPython,Helloworld”中所有英文字母都转换成小写。代码如下:字符串处理的常用操作4.84.8.5字符串的填充、空白和对齐1.str.strip()、str.lstrip()和str.rstrip()函数str.strip()用于移除字符串头尾指定的字符(默认为空格)或字符序列,str.rstrip()删除字符串右端指定的字符,str.lstrip()删除字符串左端指定的字符。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。字符串处理的常用操作4.84.8.5字符串的填充、空白和对齐>>>s="heisastudent\t\t”>>>s.strip()#删除s左右两端的空白字符,包括空格、制表符、换行符、中文空格等'heisastudent’>>>s.rstrip(“\t”)#删除s右端的\t的字符‘heisastudent’>>>'aabbccddeeeffg'.strip(‘gaef’)‘bbccdd’例4-16
字符串删除的代码示例字符串处理的常用操作4.82.str.zfill()函数str.zfill()函数用于左填充,使用0填充到指定宽度。3.str.center()、str.ljust()、str.rjust()函数str.center()、str.ljust()、str.rjust()这三个方法用于返回指定宽度的新字符串,原字符串居中、左对齐或右对齐出现在新字符串中。如果指定的宽度大于字符串长度,则使用指定的字符(默认为空格)填充。字符串处理的常用操作4.8(1)center()方法语法:str.center(width[,fillchar])。参数如下:width:字符串的总宽度;fillchar:填充字符。center()方法返回一个指定的宽度居中的字符串,fillchar为填充的字符,默认为空格。如果
width小于字符串宽度直接返回字符串,否则使用fillchar去填充。(2)ljust()方法语法:str.ljust(width[,fillchar])。参数如下:width:指定字符串长度;fillchar:填充字符,默认为空格。ljust()方法返回一个原字符串左对齐,并使用空格或者指定填充字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。字符串处理的常用操作4.8(3)rjust()方法语法:str.rjust(width[,fillchar])。参数如下:width:指定填充指定字符后中字符串的总长度;fillchar:填充的字符,默认为空格。rjust()返回一个原字符串右对齐,并使用指定填充字符或者空格填充至长度的新字符串。如果指定的长度小于字符串的长度则返回原字符串。字符串处理的常用操作4.8>>>"let’sbegin".center(20,"+")'++++let’sbegin+++++'>>>"let’sbegin".ljust(20,"-")'let’sbegin---------'>>>"let’sbegin".rjust(20,"&")'&&&&&&&&&let’sbegin'例4-17center()、ljust()、rjust()的代码示例。4.expandtabs()函数expandtabs()函数用来将字符串中的制表符(tab)扩展为若干个空格,tabsize默认为8。字符串处理的常用操作4.84.8.6字符串的测试、查找和替换1.startswith()、endswith()函数这两个方法用来判断字符串是否以指定字符串开始或者结束。(1)startswith()方法语法:str.startswith(str,beg=0,end=len(string))。参数如下:str:检测的字符串;strbeg:可选参数用于设置字符串检测的起始位置;strend:可选参数用于设置字符串检测的结束位置。(2)endswith()方法语法:str.endswith(suffix[,start[,end]])。参数如下:suffix:该参数可以是一个字符串或者是一个元素;start:字符串中的开始位置;end:字符中结束位置。字符串处理的常用操作4.8>>>"test.py".endswith((".py",".cpp",".java"))True>>>"test.py".startswith("test",0)True例4-18startswith()、endswith()的代码示例字符串处理的常用操作4.82.find()和rfind()函数find()和rfind()函数分别用来查找一个字符串在另一个字符串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在则返回-1。find()是从字符串左边开始查询子字符串匹配到的第一个索引。rfind()是从字符串右边开始查询字符串匹配到的第一个索引。find()方法语法:str.find(strs,beg=0,end=len(string))。rfind()方法语法:str.rfind(strs,beg=0end=len(string))。参数如下:strs:指定检索的字符串;beg:开始索引,默认为0;end:结束索引,默认为字符串的长度。字符串处理的常用操作4.83.index()和rindex()index()和rindex()方法分别用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常。index()方法语法:str.index(strs,beg=0,end=len(string))。rindex()方法语法:str.rindex(strs,beg=0,end=len(string))。参数如下:strs:指定检索的字符串;beg:开始索引,默认为0;end:结束索引,默认为字符串的长度。请思考:find()和index()的区别。二者都是返回字符串出现的位置,区别在于find()没有找到该字符串时返回值为-1,不影响程序的运行;而index()则会报错。字符串处理的常用操作4.84.count()count()方法用来返回一个字符串在当前字符串中出现的次数。count()方法语法:str.count(sub,start=0,end=len(string))。参数如下:sub:搜索的子字符串;start:字符串开始搜索的位置,默认为第一个字符,第一个字符索引值为0;end:字符串中结束搜索的位置,字符中第一个字符的索引为
0,默认为字符串的最后一个位置。字符串处理的常用操作4.8>>>mystr="Pythonisanexcellentlanguage">>>index=mystr.find("an",11,50)>>>print(index)24>>>index=mystr.find("an")>>>print(index)10>>>rindex=mystr.rfind("an")>>>print(rindex)24>>>index=mystr.find("programming")>>>print(index)-1>>>index=mystr.index("excellent",0,30)>>>print(index)13>>>rindex=mystr.rindex("on")>>>print(rindex)4例4-19字符串查找的代码示例如下字符串处理的常用操作4.85.字符串的替换replace(old,new,max)方法把字符串中的old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过max次。字符串处理的常用操作4.8例4-20
字符串替换示例>>>str="thisisstringexample...wow!!!thisisreallystring">>>print(str.replace("is","was"))thwaswasstringexample...wow!!!thwaswasreallystring>>>print(str.replace("is","was",3))thwaswasstringexample...wow!!!thwasisreallystring字符串处理的常用操作4.84.8.7字符串的拆分和组合1.split()和rsplit()split()、rsplit()方法分别用来以指定字符为分隔符,把当前字符串从左往右、从右往左分隔成多个字符串,并返回包含分割结果的列表。如果不指定分隔符,则字符串中的任何空白符号(空格、换行符、制表符等)都将被认为是分隔符,连续多个空白字符被看作一个分隔符。split()通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num次,返回num+1个子字符串。split()方法语法:str.split(str="",num=string.count(str))。参数如下:str:分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。num:分割次数,默认为
-1,即分割所有。字符串处理的常用操作4.84.8.7字符串的拆分和组合2.partition()和rpartition()partition()和rpartition()用来以指定字符串为分隔符,将原字符串分隔为三部分:分隔符前的字符串、分隔符字符串、分隔符后的字符串,返回类型是一个元组。如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串。partition()方法语法:str.partition(strs)。参数如下:strs:指定的分隔符。3.str.splitlines()按行分割字符串,返回一个列表值。字符串处理的常用操作4.8>>>str='Winxp||Win7||Win8||Win10'>>>print(str.split("||"))['Winxp','Win7','Win8','Win10']>>>print(str.split('||',2))#指定最大分隔次数为2['Winxp','Win7','Win8||Win10']>>>print(str.rsplit('||',2))['Winxp||Win7','Win8','Win10']>>>str.partition("||")('Winxp','||','Win7||Win8||Win10')>>>str.rpartition("||")('Winxp||Win7||Win8','||','Win10')>>>str.partition("*")#该分隔符不存在,返回原字符串和两个空串('Winxp||Win7||Win8||Win10','','')例4-21
字符串分隔的代码示例字符串处理的常用操作4.84.8.8字符串常量Python标准库sting中定义了数字字符(string.digits)、标点符号(string.punctuation)、英文字母(string.ascii_letters)、大写字母(string.ascii_uppercase)、小写字母(string.ascii_lowercase)等常量。字符串处理的常用操作4.8>>>importstring>>>string.digits'0123456789'>>>string.punctuation'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'>>>string.ascii_letters'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'>>>string.ascii_uppercase'ABCDEFGHIJKLMNOPQRSTUVWXYZ'>>>string.ascii_lowercase'abcdefghijklmnopqrstuvwxyz'例4-22字符串常量使用示例字符串的格式化4.9在字符串拼接时,很多时候并不能直接简单地将数量值与字符串拼接在一起。例如,账单中的数值需要保留两位小数,再如,在显示时为了美观,需要对齐某些内容。这时就需要用到格式化字符串。Python的字符串格式化有两种方式:格式化表达式和format()方法。字符串的格式化4.94.9.1格式化表达式字符串格式化表达式用%表示,%之前是需要进行格式化的字符申,%之后是需要填入字符串中的实际参数,语法如下:“%格式控制符”%实际参数Python常用的格式控制符如表4-3所示字符串的格式化4.9在格式化时可以配合一些辅助指令来进行,常用的格式化操作符辅助指令如表4-4所示:字符串处理的常用操作4.8>>>print('Mynameis%sandweightis%dkg!'%('Tom',30))MynameisTomandweightis30kg!>>>print('%c'%97)a>>>print('%f'%3.1415926)#默认保留6位小数3.141593>>>print('%20.2f'%3.1415926)#返回的数字宽度是20位,保留2位小数,默认右对齐
3.14例4-23用%表示字符串格式化字符串的格式化4.94.9.2format()方法1.format()方法的基本使用字符串format()方法的基本格式如下:<模板字符串>.format(<逗号分隔的参数>)模板字符串由一系列槽组成,用来控制修改字符串中嵌入值出现的位置,其基本思想是将format()方法中逗号分割的参数按照序号关系替换到模板字符串的槽中。槽用{}表示,如果大括号中没有序号,则按照出现顺序替换。字符串处理的常用操作4.8#{}槽中没有指定序号,按照出现位置顺序替换>>>print('{}:计算机{}的CPU占用率为{}%.'.format('2019-01-30','Python',10))2019-01-30:计算机Python的CPU占用率为10%.#槽{}中分别指定1、0、2的序号,则从后面的参数按指定序号传入>>>print('{1}:计算机{0}的CPU占用率为{2}%.'.format('Python','2019-01-30',10))2019-01-30:计算机Python的CPU占用率为10%.例4-24字符串format()方法示例一字符串的格式化4.92.format()方法的格式控制format()方法中模板字符串的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式为:{<参数序号>:<格式控制标记>}其中,格式控制标记用来控制参数显示时的格式,格式内容如表4-5所示。字符串的格式化4.9format()方法的格式控制具体应用如表4-6所示。Python的内建字符串(str)方法4.10字符串数据类型是使用最广泛的一种基本数据类型,他内建了很多方法,表4-7列出了Python3.7里内置的方法及功能描述。案例实战4.11例4-25编写程序,输入任意一个字母,将字母循环后移5个位置后输出显示c=input("Pleaseinputacharacter:")ifc.isalpha():#判断输入字符串是否为字母
if'a'<=c<='u'or'A'<=c<='U':result=chr(ord(c)+5)if'v'<=c<='z'or'V'<=c<='Z':result=chr(ord(c)-21)print(result)else:print("Youmustinputacharacter,notis{0}".format(c))案例实战4.11例4-26编写程序,生成100个4位数的验证码,从中随机挑选一个importstring#导入string模块importrandom#导入随机数模characters=string.digits#创建数字字符变量#print(characters)defgetRandompwd(n):pwd=""#用来存1个4位数的验证码
pwdlist=[]#用来存n个验证码的列表
foriinrange(n):#本循环用来生成100个验证码
pwd=""forjinrange(4):#本循环用来生成1个4位数的验证码
pwd=pwd+random.choice(characters)pwdlist.append(pwd)returnpwdlist#返回的是一个包含100个4位数的验证码列表verifcode=random.sample(getRandompwd(100),1)#从n个验证码中随机选择一个print("验证码为:{[0]}".format(verifcode))#输出该验证码if__name__=="__main__":#随机从返回的列表样本中抽取1个4位
verifcode=random.sample(getRandompwd(100),1)print("验证码为:{[0]}".format(verifcode))课后习题4.121.
A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于2026年供应商付款周期变动的函3篇范文
- 增强免疫力科学预防疾病小学一年级主题班会课件
- 内容编辑创作质量考核表
- 品牌管理专员绩效考核表
- 研究科学家绩效考核表
- 智慧物流分拣系统智能升级方案
- 关于新产品测试反馈通知函(5篇)范文
- 智能设备操作失误防范预案
- 5.1 什么是面积(教学设计)北师大版数学三年级下册
- 2025-2026学年逆向教学设计教案语文
- 2024年江苏省南京市中考英语试卷真题(含答案)
- 肛裂中西医结合诊疗指南
- 钢材月结合同协议
- 档案管理岗位竞聘报告
- 麻醉患者恢复期的气道管理
- GA/T 701-2024安全防范指纹识别应用出入口控制指纹识别模块通用规范
- 2024年广东省深圳市南山区中考英语三模试卷
- 高考现代文阅读导练:文学短评(知识点+理论指导+对点练+答案解析)
- 煤矿井下随钻测量定向钻进技术
- 2024项目投资协议书
- 初中数学竞赛双十字相乘法因式分解练习100题及答案
评论
0/150
提交评论