版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章字符串第4章字符串本章学习目标了解ASCII、Unicode、UTF-8等常见字符编码格式了解转义字符和字符串常量的概念和用法掌握字符串的索引与切片操作掌握字符串的运算熟悉字符串常用方法目录1字符串常量字符编码2转义字符3字符串的索引与切片4字符串操作5字符串应用案例54.1字符编码字符串由若干个字符组成,属于不可变序列类型,不能对字符串对象进行字符的增加、修改与删除等操作。字符串常量使用单引号、双引号、三单引号或三双引号作为界定符,并且不同的界定符之间可以相互嵌套。例如:'abcd'、"Python"'''Tomsaid,"Let'sgo"'''4.1
字符编码由于计算机只能识别由“0”和“1”组成的二进制数,因此在计算机内部不能直接存储和处理字符,而是将字符以某种编码的方式进行存储和处理的。字符编码也称为字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。字符编码提供了字符与数值之间的映射关系。4.1.1ASCII码ASCII码,即美国信息交换标准码,是最早的字符编码,也是目前使用最广泛的西文字符集及其编码。ASCII码使用7个或8个二进制位进行编码,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配数值。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充ASCII码。标准ASCII字符集共有128个字符,其中有96个可打印字符,包括常用的字母、数字、标点符号等,另外还有32个控制字符。4.1.1ASCII码常见字符ASCII编码的大小规则为:空格<数字字符<大写英文字母<小写英文字母。1.数字字符比英文字母小,例如:“7”<“F”;2.数字字符“0”比数字字符“9”小,并按“0”到“9”顺序递增,例如:“3”<“8”;3.字母“A”比字母“Z”小,并按“A”到“Z”顺序递增,例如:“A”<“E”;4.字母“a”比字母“z”小,并按“a”到“z”顺序递增,例如:“a”<“e”;5.同个字母的大写字母比小写字母的ASCII编码值小32,例如“A”<“a”。Unicode码也称为统一码,其编码标准为表达全世界所有语言的任意字符而设计,它把所有语言都统一到一套编码里,为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode码使用了4个字节的数字编码,每个数字编码代表唯一的至少在某种语言中使用的符号(并不是所有的数字编码都被使用了),被几种语言共用的字符通常使用相同的数字来编码,每个字符对应一个数字编码,每个数字编码对应一个字符,即不存在二义性。ASCII码是Unicode编码方案的一个子集。4.1.2Unicode码Unicode编码标准定义了多种不同的实现方式,普遍使用的方式是UTF-8。UTF-8以字节为单位对Unicode码进行编码,是一种可变长度字符编码,即对不同范围的字符使用不同长度的编码,可用1~4个字节表示一个字符。对于ASCII字符,UTF-8使用1个字节来编码,编码方式与ASCII编码完全相同。拉丁字符使用2个字节来编码,中文汉字使用3个字节来编码,一些更复杂的字符则使用4个字节来编码。4.1.3UTF-8例如:>>>s="汉">>>s=s.encode("utf-8")>>>sb'\xe6\xb1\x89'>>>s=s.decode("utf-8")>>>s'汉'4.1.3UTF-8在Python中,可以通过字符串的encode()方法从Unicode编码转为指定的编码方式。例如,s.encode(“UTF-8”)表示字符串s从Unicode编码方式转为UTF-8编码方式。字符串的decode()方法则是从指定编码方式解码为Unicode编码方式。例如,可以使用Σ、π等希腊字母或中文汉字作为变量名使用。>>>x,y=10,20>>>Σ=x+y>>>Σ30>>>城市=“武汉">>>城市‘武汉'4.1.3UTF-8UTF-8支持中英文编码,英文系统也可以显示中文,即无须下载浏览器的中文语言支持包,即可在英文浏览器上显示中文。Python支持UTF-8编码,所有在Python中标识符也可以使用中文字符、希腊字母。ord()函数:将一个字符转化为相应的编码值(ASCII码或Unicode码)。chr()函数:将一个整数转化为Unicode字符。例如:>>>ord('A')65>>>chr(65)'A'4.1.3UTF-8Python提供了两个内置函数ord()和chr(),用于字符与其内部编码值(ASCII码或Unicode码)之间的转换。string模块中定义的常用的字符串常量如下:ascii_letters:返回所有大小写英文字母。ascii_lowercase:返回所有小写字母。ascii_uppercase:返回所有大写字母。digits:返回十进制数字字符串。hexdigits:返回十六进制数字字符串。octdigits:返回八进制数字字符串。punctuation:返回英文标点符号。printable常量:返回可打印字符。whitespace常量:返回空白符号。4.2字符串常量在Python的string模块中定义了多个字符串常量,包括数字字符、大写英文字母、小写英文字母、英文标点符号等,用户可以直接使用这些常量。>>>fromstringimport*>>>ascii_letters'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'>>>ascii_lowercase'abcdefghijklmnopqrstuvwxyz'>>>ascii_uppercase'ABCDEFGHIJKLMNOPQRSTUVWXYZ'>>>digits'0123456789'>>>punctuation'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'4.2字符串常量例如:【例4-1】随机生成8位长度的密码,密码由大、小写字母或数字组成,可以有重复字符。【分析】使用string模块中的常量ascii_letters获取所有大、小写字母,使用常量digits获取所有数字字符,使用random模块的choice()函数从大、小写字母和数字字符中随机抽取一个字符。4.2字符串常量4.2字符串常量【参考代码】importstring,randomzf=string.ascii_letters+string.digitss=''foriinrange(8):s+=random.choice(zf)print(s)Python常用的转义字符及其含义如表4-3所示。4.3转义字符转义字符以反斜杠“\”开头,后接一个或几个字符。转义字符具有特定的含义,与字符原有的意义并不相同。例如,“\n”和“\t”就是转义字符。“\n”的意义是回车换行符,“\t”的意义是水平制表符。>>>print("Hello\nWorld")HelloWorld>>>print("Hello\tWorld")Hello World在Python中,如果需要输出带有反斜杠符号的字符串,同样可以使用转义字符。例如,以下代码实现了输出“C:\Python\test.py”,其中包含了反斜杠符号。>>>print("C:\Python\\test.py")C:\Python\test.py4.3转义字符例如:如果字符串中包含单引号或双引号,也可以使用转义字符来避免语法错误。例如:>>>print('I\'maPythonprogrammer')I'maPythonprogrammer如果不想让反斜杠发生转义,可以将字符串定义为raw字符串。raw字符串就是在字符串前面添加一个r,表示该字符串是原始字符串,其中包含的任何字符都不进行转义。例如:>>>print("C:\newfiles\test.py")#字符串中的“\n”和“\t”都当作转义字符C:ewfiles est.py>>>print(r"C:\newfiles\test.py")#字符串中的“\n”和“\t”不发生转义C:\newfiles\test.py4.3转义字符索引(Index)是一种按照顺序给数据结构中的元素编号的方式,通过指定编号来快速获取元素的值。Python支持正向索引和反向索引。正向索引起始编号总是从0开始,从左到右计数,依次增加1,即字符串中最左边第1个字符的编号为0,第2个字符的的编号为1,依次增加1,最右边最后1个字符的编号比字符串的长度小1。反向索引编号使用负数,起始编号从-1开始,从右到左计数,依次减小1,即字符串中最右边的字符(倒数第1个字符)的编号为-1,倒数第2个字符的编号为-2,依次减小1,最左边第1个字符的编号为字符串长度的负值。4.4字符串的索引与切片4.4.1字符串的索引在字符串变量名后面接用中括号[]括起来的编号即可实现对字符串的索引。例如:>>>s="PYTHON">>>s[0]'P'>>>s[-1]'N'>>>print(s[3])H4.4.1字符串的索引例如:字符串“PYTHON”的正向索引与反向索引如图所示。参考代码:id_card=input("请输入18位身份证号码:")k=int(id_card[-2])ifk%2==0:print("性别:女")else:print("性别:男")4.4.1字符串的索引【例4-2】根据用户输入的身份证号码判定用户的性别。中国居民身份证号码中的倒数第2位代表性别。倒数第2位为奇数代表男性。倒数第2位为偶数代表女性。例如,输入,输出“性别:男”。字符串的切片是指通过指定索引范围从给定的字符串中分离出一部分字符。切片操作不会修改原始字符串,而是返回一个新的字符串。字符串切片操作的格式如下:
字符串[start:end:step]
其中,start是起始索引位置(该位置上的字符包含在切片结果中),end是结束索引位置但是该位置上的字符不包含在切片结果中,step是索引编号每次增加的步长。start、end、step的值均为整数,可以是正整数,也可以是负整数。4.4.2字符串的切片>>>s="PythonProgram">>>s[0:6:2]'Pto'>>>s[-1:-5:-1]'marg'>>>print(s[-len(s)-1:-8:1])Python4.4.2字符串的切片例如:例如:>>>s="abcdefgh">>>s[:6:2]#省略起始索引,默认从0开始'ace'>>>s[:-5:-2]#省略起始索引,默认从-1开始'hf'>>>s[1::3]#省略结束索引,默认到最后一个字符结束'beh'>>>s[2:5]#省略步长,默认步长为1'cde'>>>s[:]#默认从字符串s左边第1个字符取到最后一个字符'abcdefgh'>>>s[::-1]#默认从字符串s最右边的字符取到左边第1个字符,即得到s的逆序字符串'hgfedcba'4.4.2字符串的切片字符串切片操作的索引编号中,起始索引start、结束索引end、步长step均可省略。省略start时,默认起始索引位置从0或-1开始;省略end时,默认到最后一个字符结束;省略step时,步长值默认为1。参考代码:s=input("请输入一个字符串:")n=len(s)-1foriinrange(n,0,-1):print(s[0:i])4.4.2字符串的切片【例4-3】输入一个字符串,依次去掉最后面的字符并输出。【分析】利用字符串的切片操作,使用for循环结构输出切片后的新字符串。1、字符串连接运算Python提供了加号“+”运算符,表示将两个字符串数据连接起来,成为一个新的字符串数据。用“+”运算符把字符串常量、字符串变量等字符串类型的数据连接起来的表达式称为字符串表达式,它的一般格式如下:S1+S2+…+S3其中,S1、S2、S3均是一个字符串,该表达式的值也是一个字符串。例如:
>>>"Python"+"Program"'PythonProgram‘连接运算符(+)支持复合赋值操作。例如:>>>s="ab">>>s+="cd">>>s'abcd'4.5字符串的操作4.5.1字符串的运算参考代码:s=input("请输入一个字符串:")ds=''foriins:if'0'<=i<='9':ds+=iifds:a=sorted(ds,reverse=True)foriina:print(i,end='')else:print(0)4.5.1字符串的运算【例4-4】输入一个字符串,提取字符串中的数字字符,连接成最大整数后输出。若输入的字符串中没有数字字符,则输出0。例如,输入字符串“sa2m8-tk35de1”,则输出“85321”;输入字符串“sfh*et!kxyz”,则输出“0”。【分析】遍历字符串,将所有数字字符连接成一个字符串,对数字字符串进行降序排序并输出。Python中使用“+”进行字符串连接效率较低,因为Python中字符串是不可改变的,使用“+”运算符连接两个字符串时会生成一个新的字符串,生成的新字符串需要重新申请内存。当进行连接运算的字符串个数较多时,连接效率自然就会比较低。可以使用格式化操作符或字符串的join()方法取代“+”连接运算符进行字符串的连接操作,这样只会有一次内存的申请,可以提高操作效率。例如:>>>"{}{}{}".format("Python","Program","Design")'PythonProgramDesign'>>>"".join(["Python","Program","Design"])'PythonProgramDesign'4.5.1字符串的运算Python中字符串可以和整数进行乘法运算“*”,从而得到一个由该字符串自身重复连接而成的新字符串。字符串重复连接运算的一般格式如下:s*n或n*s其中,s是一个字符串,n是一个正整数,代表重复的次数。例如:>>>s="abcd">>>s*2'abcdabcd'>>>3*s'abcdabcdabcd'4.5.1字符串的运算2、字符串重复连接运算重复连接运算符(*)也支持复合赋值操作。例如:>>>s="Yes">>>s*=2>>>s'YesYes'4.5.1字符串的运算2、字符串重复连接运算字符串逻辑运算是指字符串参与逻辑比较运算,其操作结果是一个布尔值(True或False),通常用作表示字符串处理的条件表达式。(1)字符串的关系运算与数值型数据一样,字符串也能进行关系运算,字符串之间可以进行大于“>”、大于等于“>=”、小于“<”、小于等于“<=”、等于“==”和不等于“!=”的运算。字符串关系表达式的值是布尔值,即只有True和False两种结果。4.5.1字符串的运算3、字符串逻辑运算在进行字符串的比较运算时,应遵循以下规则:①单个字符大小的比较,是按照字符ASCII编码的大小进行比较的。常见字符ASCII编码的大小规则为:空格<数字字符<大写英文字母<小写英文字母。例如:
>>>"6"<"A"True>>>"A"<"E"True>>>"E"<"a"True4.5.1字符串的运算3、字符串逻辑运算②长度相同的两个字符串的比较,是将字符串中的字符从左向右逐个进行比较,如果所有字符都相等,则两个字符串相等;如果两个字符串中有不同的字符,则以最左边第1对不同字符的比较结果作为两个字符串的比较结果。例如:>>>"program">"probity"True>>>"axyz">"bcde"False4.5.1字符串的运算3、字符串逻辑运算③长度不相同的两个字符串的比较时,通常先将较短的字符串后面补足空格后再进行比较。例如:>>>"prog"<"program"True>>>"12">"6"False上面代码中,"prog"和"program"比较时,先将“prog”后面补空格成为“prog□□□”,再与“program”进行比较。因为第5个字符空格小于字母“r”,所以"prog"小于"program"。"12"和"6"比较时,因为第1个字符就不相同,字符“1”比字符“6”小,所以得出“12”比“6”小,此时“6”不用补足空格,即可和“12”比较出大小。4.5.1字符串的运算3、字符串逻辑运算字符串的成员关系运算包括in和notin运算,具体语法格式如下:字符串1[not]in字符串2成员关系运算用于判断字符串1是否包含于字符串2中,运算结果为True或False。例如:>>>"a"in"abcd"True>>>"b"notin"abcd"False>>>"bd"in"abcd"False>>>"ac"notin"abcd"True4.5.1字符串的运算4、成员关系运算参考代码:n=0foriinrange(10):s=input("请输入一个单词:")ifs[0]in"aeiouAEIOU":n+=1print(n)4.5.1字符串的运算【例4-5】输入10个英文单词,统计其中以元音字母开头的单词的个数并输出。例如,输入“redappleblueuswhiteeggblackonetwofour”,输出“4”。【分析】输入一个英文单词并判断其首字母是否是元音字母,用for循环控制该操作重复10次。f-string基本语法是在字符串前加上f或F前缀,然后在字符串内部使用花括号{}来包含变量或表达式。例如:>>>name="Alice">>>age=20>>>print(f"Hello,mynameis{name}andIam{age}yearsold.")Hello,mynameisAliceandIam20yearsold.>>>a=5>>>b=3>>>print(f"Thesumof{a}and{b}is{a+b}.")Thesumof5and3is8.4.5.1字符串的运算5、格式化字符串f-string还支持多种格式化选项,例如设置内容宽度、对齐方式、填充字符、小数的保留位数等。例如:>>>text="Hello">>>print(f"{text:<10}")#左对齐Hello>>>print(f"{text:>10}")#右对齐Hello>>>print(f"{text:^10}")#居中对齐Hello>>>print(f"{text:*^10}")#用*填充居中对齐**Hello***4.5.1字符串的运算5、格式化字符串例如:>>>print(f'{-10:+},{10:+}')-10,+10>>>print(f'{-10:-},{10:-}')-10,10>>>print(f'{-10:},{10:}')-10,104.5.1字符串的运算5、格式化字符串数字分隔描述符如教材表4-6所示。其中逗号适用于浮点数、复数和十进制整数;下划线适用于浮点数、复数和所有进制的整数;如果不指定分隔符,那么默认不使用分隔符。例如:>>>x=1560>>>print(f'{x:,},{x:_}')1,560,1_5604.5.1字符串的运算5、格式化字符串数据格式描述符如教材表4-7所示。例如:>>>m=97>>>print(f'{m:b},{m:c},{m:d},{m:o},{m:x}')1100001,a,97,141,61>>>y=123.567>>>print(f'{y:.2f},{y:7.1f},{y:e},{y:%}')123.57,123.6,1.235670e+02,12356.700000%4.5.1字符串的运算5、格式化字符串方法是由若干语句组成的、具有独立功能的一个可执行的程序段。方法(method)与函数(function)是同一个概念,函数是面向过程程序设计的概念,方法是面向对象程序设计的概念。在面向过程程序设计中,函数是独立的程序段,可以通过函数名直接调用,例如print(“Python”)。而在面向对象程序设计中,类的成员函数称为方法。方法在类中进行定义,通过对象名或类名进行调用。方法调用的语法格式如下:对象名.方法名([参数])4.5.2字符串的常用方法Python中字符串对象提供了很多方法来实现对字符串的处理,功能相当丰富。由于字符串是不可改变的数据类型,调用字符串的方法后原始字符串并没有改变,而是创建了一个新的字符串。①s.upper():将字符串s中的所有小写字母转换为大写字母。②s.lower():将字符串s中的所有大写字母转换为小写字母。例如:>>>s="ABcd">>>s.upper()'ABCD'>>>s.lower()'abcd'4.5.2字符串的常用方法1.字母大小写转换③s.capitalize():将字符串s的第一个字母变成大写,其余字母变为小写。④s.title():返回一个满足标题格式的字符串,即所有英文单词首字母大写,其余英文字母小写。例如:>>>s="HELLOWORLD">>>s.capitalize()'Helloworld'>>>s.title()'HelloWorld'⑤
s.swapcase():将字符串s中的大小写字母进行互换,即将字符串s中的大写字母转换为小写字母,将小写字母转换为大写字母。例如:>>>s="HelloWorld">>>s.swapcase()'hELLOwORLD'4.5.2字符串的常用方法1.字母大小写转换①s.center(width[,fillchar]):返回一个长度为width,原字符串s居中,两边不足部分用fillchar(单个字符)填充的新字符串。若字符串的长度大于width,则直接返回字符串s。若省略fillchar参数,默认用空格填充。②s.ljust(width[,fillchar]):返回一个长度为width,原字符串s左对齐,右边不足部分用fillchar(单个字符)填充的新字符串。若字符串的长度大于width,则直接返回字符串s。若省略fillchar参数,默认用空格填充。③s.rjust(width[,fillchar]):返回一个长度为width,原字符串s右对齐,左边不足部分用fillchar(单个字符)填充的新字符串。若字符串的长度大于width,则直接返回字符串s。若省略fillchar参数,默认用空格填充。④s.zfill(width):返回一个长度为width,原字符串s右对齐,左边不足部分用0填充的新字符串。4.5.2字符串的常用方法2.字符串对齐处理例如:>>>s="python">>>s.center(10,"*")'**python**'>>>s.center(10)'python'>>>s.ljust(10,"*")'python****'>>>s.rjust(10,"*")'****python'>>>s.zfill(10)'0000python'4.5.2字符串的常用方法2.字符串对齐处理①s.find(sub[,start[,end]]):查找字符串sub在字符串s指定范围(即s[start:end])中第一次出现的位置。如果存在则返回s中出现sub的第1个字符的索引编号;若不存在则返回-1。start参数指定查找范围的起始索引位置,省略时默认为0。end参数指定查找范围的结束索引位置(但查找范围不包括end位置),省略时默认为字符串s的长度,即len(s)。例如:>>>s="abcdef">>>s.find("de")3>>>s.find("de",1,4)-14.5.2字符串的常用方法3.字符串查找②s.rfind(sub[,start[,end]]):查找字符串sub在字符串s指定范围(即s[start:end])中最后一次出现的位置。如果存在则返回s中最后出现的sub的第1个字符的索引编号(即从s右边开始第1次出现sub的首字符的索引编号);若不存在则返回-1。start参数和end参数的作用与s.find()方法相同。例如:>>>s="abcdefcdef">>>s.rfind("cd")6>>>s.rfind("cd",0,5)2>>>s.rfind("df")-14.5.2字符串的常用方法3.字符串查找③s.index(sub[,start[,end]]):与s.find()类似,也是查找字符串sub在字符串s指定范围(即s[start:end])中第一次出现的位置。如果存在则返回s中出现sub的第1个字符的索引编号;若不存在则会返回一个运行时错误的信息。④s.rindex(sub[,start[,end]]):与s.rfind()类似,也是查找字符串sub在字符串s指定范围(即s[start:end])中最后一次出现的位置。如果存在则返回s中最后出现的sub的第1个字符的索引编号;若不存在则返回一个运行时错误的信息。例如:>>>s="abcdefcdef">>>s.index("de")3>>>s.rindex("cd")64.5.2字符串的常用方法3.字符串查找⑤s.count(sub[,start[,end]]):统计字符串sub在字符串s指定范围(即s[start:end])中出现的次数。start参数和end参数的作用与s.find()方法相同。例如:>>>s="HelloWorld" >>>s.count("l")3>>>s.count("l",6)14.5.2字符串的常用方法3.字符串查找⑥s.startswith(prefix[,start[,end]]):判断字符串s指定范围(即s[start:end])内的字符串是否以指定字符串prefix开头,返回值为布尔类型,若是则返回True,否则返回False。start参数和end参数的作用与s.find()方法相同。⑦s.endswith(suffix[,start[,end]]):判断字符串s指定范围(即s[start:end])内的字符串是否以指定字符串prefix结尾,返回值为布尔类型,若是则返回True,否则返回False。start参数和end参数的作用与s.find()方法相同。当prefix为空字符串时,s.endswith()的返回值也为True。例如:>>>s="HelloWorld" >>>s.startswith("He")True>>>s.startswith("")#判断s是否以空串开头True>>>s.endswith("rd")False4.5.2字符串的常用方法3.字符串查找①s.replace(old,new[,count]):把字符串s中的old替换成new。count参数用于指定替换的次数,如果省略则默认全部替换。例如:
>>>s="HelloWorld">>>s.replace("l","*",2)'He**oWorld' >>>s.replace("l","*")'He**oWor*d'4.5.2字符串的常用方法4.字符串替换②s.expandtabs([tabsize]):将字符串s中的制表符“\t”替换为空格。tabsize参数用于指定替换每个“\t”的空格个数。默认值为8。
>>>s="a\tbc\tdef">>>print(s)abcdef>>>s.expandtabs()'abcdef'4.5.2字符串的常用方法4.字符串替换①s.strip([chars]):将字符串s开头和结尾处的chars字符串删除,但是不会删除字符串s中间的chars字符串。chars参数指定要删除的字符串,省略时默认删除空格。②
s.lstrip([chars]):将字符串s开头处的chars字符串删除。chars参数指定要删除的字符串,省略时默认删除空格。③
s.rstrip([chars]):将字符串s结尾处的chars字符串删除。chars参数指定要删除的字符串,省略时默认删除空格。4.5.2字符串的常用方法5.字符串删除例如:
>>>s1="abcd">>>s1.strip()'abcd'>>>s2="abCDabEFab">>>s2.strip("ab")'CDabEF'>>>s2.lstrip("ab")'CDabEFab'>>>s2.rstrip("ab")'abCDabEF'4.5.2字符串的常用方法5.字符串删除①s.split([sep[,maxsplit]]):以sep为分隔符对字符串s进行拆分,并返回一个拆分后的字符串列表。sep参数省略时默认分隔符为空格;maxsplit参数设置拆分的次数,省略时默认值为-1,表示无限制拆分。②s.rsplit([sep[,maxsplit]]):与s.split()功能类似,也是以sep为分隔符对字符串s进行拆分,并返回一个拆分后的字符串列表。区别是s.split()是从字符串左边开始拆分,而s.rsplit()是从字符串右边(末尾)开始拆分。例如:
>>>s1="PythonProgramDesign">>>s1.split()['Python','Program','Design']>>>s2="a-b-c-d-e">>>s2.split("-",3)['a','b','c','d-e']>>>s2.rsplit("-",3)['a-b','c','d','e']4.5.2字符串的常用方法6.字符串拆分与连接③s.splitlines([keepends]):以换行符“\n”或回车符“\r”为分隔符对字符串s进行拆分,返回一个字符串列表。Keepends参数为布尔值,用于设置返回值中是否包含分隔符,省略时默认值为False,表示不包含换行符或回车符;如果设置为True,则保留换行符或回车符。例如:
>>>s="Python\nProgram\nDesign">>>s.splitlines()['Python','Program','Design']>>>s.splitlines(True)['Python\n','Program\n','Design']4.5.2字符串的常用方法6.字符串拆分与连接④s.partition([sep]):从字符串s左边第一次出现sep分隔符的位置开始,将字符串s拆分成一个包含3个字符串(即sep左边字符串,sep,sep右边字符串)的元组。如果s中不包含sep,仍然返回一个三元元组,第一个元素为字符串s,第二第三个元素为空字符串,即(s,'','')。⑤s.rpartition([sep]):与s.partition()类似,从字符串s右边第一次出现sep分隔符的位置开始,将字符串s拆分成一个包含3个字符串(即sep左边字符串,sep,sep右边字符串)的元组。如果s中不包含sep,则返回('','',s)。例如:>>>s="ab*cd*ef">>>s.partition("*")('ab','*','cd*ef')>>>s.partition("-")('ab*cd*ef','','')>>>s.rpartition("*")('ab*cd','*','ef')4.5.2字符串的常用方法6.字符串拆分与连接⑥s.join(iterable):用字符串s将iterable中的每一个元素连接起来,返回一个连接之后的新字符串。s可以是空字符串,iterable参数可以是字符串、元组、列表等。例如:
>>>"*".join("1234")'1*2*3*4'>>>iter=['Python','Program','Design']>>>"#".join(iter)'Python#Program#Design'4.5.2字符串的常用方法6.字符串拆分与连接①s.isalnum():测试字符串s是否由字母和数字组成。如果s中所有字符都是字母或数字,且s中至少有一个字符,则返回True,否则返回False。②s.isalpha():测试字符串s是否只由字母组成。如果s中所有字符都是字母且s中至少有一个字符,则返回True,否则返回False。③s.isdigit():测试字符串s是否只由数字组成。如果s中所有字符都是数字且s中至少有一个字符,则返回True,否则返回False。④s.islower():测试字符串s中的字母是否全是小写字母。如果s中字母全是小写字母,且s中包含至少一个小写字母,则返回True,否则返回False。注意,字符串s中可包含非字母字符。4.5.2字符串的常用方法7.字符串测试⑤s.isupper():测试字符串s中的字母是否全是大写字母。如果s中字母全是大写字母,且s中包含至少一个大写字母,则返回True,否则返回False。注意,字符串s中可包含非字母字符。⑥s.isspace():测试字符串s是否只由空格组成。如果s中只包含空格,则返回True,否则返回False。⑦s.istitle():测试字符串s中所有单词的首字母是否为大写,且其它字母是否为小写。如果s中所有单词的首字母为大写,且其它字母为小写,则返回True,否则返回False。⑧s.isidentifier():测试字符串s是否是有效的标识符。如果s是符合命名规则的变量或Python关键字则返回True,否则返回False。4.5.2字符串的常用方法7.字符串测试例如:
>>>s1="ABCDEF">>>s1.isupper()True>>>s2="PythonProgramDesign">>>s2.istitle()True>>>s1="for">>>s1.isidentifier()True4.5.2字符串的常用方法7.字符串测试格式:s.format(*args,**kwargs)功能:执行字符串格式化操作,将变长参数args的变量值以及字典型变量kwargs插入到字符串中进行格式化。>>>name="Alice">>>age=20>>>print("Hello,mynameis{}andIam{}yearsold.".format(name,age))Hello,mynameisAliceandIam20yearsold.>>>print("course={cs},score={sr}".format(cs='math',sr=90))course=math,score=90>>>print('{:.2f},{:c}'.format(1.236,70))1.24,F110010,50,62,324.5.2字符串的常用方法8.字符串格式化>>>m=50>>>print('{0:b},{0:d},{0:o},{0:x}'.format(m))110010,50,62,324.5.2字符串的常用方法8.字符串格式化①str.maketrans(intab,outtab[,delchars]):用于创建字符映射的转换表,返回一个字典数据,常与s.translate()连用。intab参数是字符串,包含要被替换的字符;outtab参数也是字符串,包含映射的目标字符。intab和outtab字符串长度必须相同,字符按照位置顺序一一对应映射。delchars也是字符串,包含要删除的字符,即映射为None。省略delchars则表示不删除任何字符。例如:>>>d1=str.maketrans("abcd","1234")>>>d1{97:49,98:50,99:51,100:52}>>>d2=str.maketrans("","","aeiou")>>>d2{97:None,101:None,105:None,111:None,117:None}4.5.2字符串的常用方法9.字符串加密解密②s.translate(table):将字符串s中指定的字符替换为其它字符或删除这些字符,返回一个转换后的新字符串。S中的字符根据转换表table进行转换,转换表table可以通过str.maketrans()创建,也可以创建一个字典作为转换表。例如:
>>>d1=str.maketrans("Porn","1234")>>>d1{80:49,111:50,114:51,110:52}>>>s1="PythonProgramDesign">>>s1.translate(d1)'1yth24132g3amDesig4'>>>d2=str.maketrans("Porn","1234","aeiou")>>>d2{80:49,111:None,114:51,110:52,97:None,101:None,105:None,117:None}>>>s1.translate(d2)'1yth413g3mDsg4'4.5.2字符串的常用方法9.字符串加密解密>>>s="HelloWorld"#定义一个字符串>>>print(s)HelloWorld>>>by=b"HelloWorld"#定义一个bytes对象>>>print(by)b'HelloWorld'>>>type(by)<class'bytes'>4.6bytes和bytearray对象bytes是Python3中新增的类型,用来表示一个字节序列,通常用于处理二进制数据,例如文件读写、网络通信等。例如:在字符串前面加“b”可以定义一个bytes对象,该对象中的每一个字符可以是一个ASCII字符或者是一个从\x00到\xff的十六进制数。例如:by1=b"\x61\x62\x63">>>by1b'abc'>>>by2=b''#创建一个空的bytes对象4.6bytes和bytearray对象使用bytes()函数创建一个bytes对象,有以下几种语法格式。格式一:bytes()功能:创建空的bytes对象。格式二:bytes(int)功能:创建指定个数的bytes对象,默认以0填充。int参数必须是整数,不能是浮点数。例如:>>>by=bytes(3)>>>byb'\x00\x00\x00'4.6bytes和bytearray对象格式三:bytes(iterable_of_ints)功能:创建指定内容的bytes对象。iterable_of_ints参数只能是整数类型的序列,且必须是0~255的整数,否则异常。例如:>>>by1=bytes([1,2,3,4])>>>by1b'\x01\x02\x03\x04'>>>by2=bytes([1.1,2.2])Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>by2=bytes([1.1,2.2,3,4])TypeError:'float'objectcannotbeinterpretedasaninteger4.6bytes和bytearray对象格式四:bytes(string,encoding[,errors])功能:创建bytes对象,如果string中包含中文则必须设置编码格式encoding。例如:>>>by1=bytes(b'abc')>>>by1b'abc'>>>by2=bytes('abc','utf-8')>>>by2b'abc'>>>by3=bytes('你好世界','utf-8')>>>by3b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'4.6bytes和bytearray对象使用内置函数len()可以计算bytes对象的长度,也可以使用“+”运算符连接两个bytes对象,使用“*”运算符将bytes对象进行重复连接。例如:>>>by=b"abc">>>by+=b"\x64">>>byb'abcd'>>>len(by)4>>>by*=2>>>byb'abcdabcd'4.6bytes和bytearray对象bytes对象也可以进行索引和切片操作。对bytes对象做索引操作的结果是返回一个0~255的整数。>>>by=b"Python">>>by[0]80>>>by[2:4]b'th'bytes对象跟字符串一样都是不可变序列,不能对bytes对象进行切片赋值操作。如果需要改变bytes对象中某个字节,可以使用切片和连接操作。>>>by=b"hat">>>by=b"c"+by[1:]>>>byb'cat'4.6bytes和bytearray对象4.7字符串应用案例【例4-6】随机生成8位长度的密码,密码由大、小写字母或数字组成,不允许出现重复字符。【分析】使用string模块中的常量ascii_letters获取所有大、小写字母,使用常量digits获取所有数字字符,使用random模块的sample()函数从大、小写字母和数字字符中随机抽取8个字符,最后用字符串的join()方法进行字符的连接操作。参考代码:importstring,randomzf=string.ascii_letters+string.digitsa=random.sample(zf,8)s="".join(a)print(s)4.7字符串应用案例4.7字符串应用案例【例4-7】从键盘输入一行英文句子(假设该英文句子仅由英文单词和空格构成,不包括其他符号),统计该英文句子中单词的个数及单词的平均长度。例如,输入“Ilikepython”,则输出“单词:3个,平均长度:3.67”,要求平均长度输出时保留2位小数。【分析】将输入的字符串用split()拆分成一个列表,通过len()函数获取列表元素的个数(即单词的个数),然后遍历列表中的每一个单词即可得到单词的平均长度。参考代码:s=input("请输入一个英文句子:")a=s.split()n=len(a)total=0forwordina:total+=len(word)pj=total/nprint("单词:{}个,平均长度:{:.2f}".format(n,pj))4.7字符串应用案例参考代码:s=input("请输入一个英文句子:")a=b=c=d=0forchins:if'A'<=ch<='Z':a+=1elif'a'<=ch<='z':b+=1elif'0'<=ch<='9':c+=1else:d+=1print("大写字母:{}个;小写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学美术三年级《我的小画册》知识清单
- 小学音乐一年级下册核心知识清单:四分音符与八分音符的节奏世界
- 大班幼儿审美通感体验活动《听·见春天》教学设计
- 初中七年级地理《聚落的形成与演变》核心知识清单
- 小学五年级语文《从军行》组诗教学设计-边塞诗群文阅读重构经典意象
- 小学三年级综合实践活动《探索城市生活垃圾的“前世今生”-基于项目式学习的实践探究》教案
- 小学数学五年级下册长方体和正方体单元知识清单
- 2026年中职海洋捕捞技术(渔具使用方法)试题及答案
- 2026年新版守株待兔的试题及答案
- 2026年南京时政试题及答案
- 人力资源共享服务-深度研究
- DB51T 2834-2021 四川省页岩气生产安全规程
- 云南省相对集中行政处罚权事项指导目录(2024年版)
- 2022浪潮信创服务器CS5260H2技术白皮书
- 部队营房课件教学课件
- Unit1-Unit3 (单元测试)-2024-2025学年人教PEP版(2024)英语三年级上册
- 人教版高中物理必修二同步练习及答案
- 总体概述施工组织总体设想、方案针对性及施工标段划分
- (正式版)JBT 8579-2024 内燃机 进、排气管
- 手持式氨气检测仪
- 《光伏发电工程预可行性研究报告编制规程》(NB/T32044-2018)中文版
评论
0/150
提交评论