字符串是容器型数据类型:将’‘或者’’’’’‘或者“”“”作为容器标志,引号中的每个元素都是字符串的元素。’’’’’'和“” “”在表示字符串内容的时候换行可以不使用转义字符,而是直接回车。
字符串不可变,不支持增删改
字符串是有序的,支持下标操作
字符串的元素:引号中的单独的每个符号都是字符串的元素(字符),任何元素都可以。
字符串分两大类:普通字符(表示符号本身)、转义字符
str1 = '90,100' str2 = "abc123+=@" str3 = "abc\n123" str4 = """asc 123 asd """
''' 转义字符:在特定符号前加反斜杠\,让符号具有特殊功能。一个转义字符的长度是1 常见的转义字符 \n - 换行 \t - 水平制服表(相当于tab键的功能) \' - 表示一个普通的单引号 \" - 表示一个普通的双引号 \\ - 表示一个普通的反斜杠 ''' # \u4位数的十六进制数 - 编码字符 str5 = "it's me" str6 = 'it\'s me' print(str6) # it's me str7 = '\tabc\n123' print(str7) str8 = '' # 空串
计算机只能储存数字,而且是保存数字的二进制的补码,文字符号是无法直接储存到计算机的。为了能够让计算机具备储存文字符号的能力,我们给所有的文字符号对应一个固定的数字,每次储存文字符号的时候就吧符号对应的数字储存起来,符号对应的数字就是符号的编码值。
编码表即保存符号和数字对应关系的表
1)ASCII 码表
a.总共有128个,(美国符号)
b.数字在字母的前面,大写字母(65-90)在小写字母(97-122)前面;大写字母和小写字母之间有其他符号,相差32.
2)Unicode编码表
a.是对ASCII码表的扩展,包含了世界上所有的国家所有的民族所有的语言的符号
b.中文范围:4e00~9fa5
''' a.chr函数: chr(编码值) - 获取编码值对应的字符 b.ord函数;ord(字符) - 获取字符的编码值 c.编码字符:\u4e00 - 整体是一个字符,(16进制) 注意:python中需要字符的地方必须使用长度为1的字符串 ''' print(chr(97)) # a print(chr(35), chr(0x23)) # # # print(chr(0x4e00), chr(0x9fa5)) # 一 龥 # 获取所有的中文字符: num = 0 for x in range(0x4e00, 0x9fa5 + 1): print(chr(x)) num += 1 if num % 30 == 0: print() print() # 将大写字母转换成小写字母 c = 'M' new_c = chr(ord(c) + 32)
字符串获取元素的语法和列表获取元素的语法一模一样。
#拼接:用+可以用于字符串拼接 # 练习:提取字符中小写字母 str2 = 'ss试试看78,mvn0-k=上课23' new_str2 = '' for x in str2: if 'a' <= x <= 'z': new_str2 += x print(new_str2) new_str3 = [x for x in str2 if 'a' <= x <= 'z'] print(new_str3)
# 两个字符串比较大小,比较的是第一队不相等的字符的编码值的大小 ''' char = ? 判断是否是数字字符:'0' <= char <= '9' 判断是否是小写字母:'a' <= char <= 'z' 判断是否是大写字母:'A' <= char <= 'Z' 判断是否是字母: 'a' <= char <= 'z' or 'A' <= char <= 'Z' 判断是否汉字 '\u0x4e00' <= char <= '\u0x9fa5' ''' # 1)比较是否相等 == != print('abc' == 'acb') # False # 2) 比较大小:>、<、>=、<= print('Mndf' > 'asd') # False print('你好' > 'as') # True # 练习2: # 1)统计中文字符的个数 # 2)打印字符串中所有的数字字符 # 3)提取字符串中所有的字母 str3 = '你好loe--23=sks;M9JHkyu是-12山卡拉' count = 0 char = '' for x in str3: if '\u4e00' <= x <= '\u9fa5': count += 1 if '0' <= x <= '9': print(x, end='') if 'a' <= x <= 'z' or 'A' <= x <= 'Z': char +=x print() print(count) print(char)
# 字符串1 in 字符串2 - 判断字符串2中是否包含字符串1 print('abc' in 'abc123') # True print('1' in 'abc123') # True print('ac' in 'abc123') # False
''' len() - 获取字符串长度 str(数据) - 将数据转换成字符串,任何数据都可以转换成字符串;转换的时候是在数据打印值的外边 加引号 eval(字符串) - 可以去掉字符串的引号,获取数据,如果去掉引号后是表达式,就会计算表达式的结果。 字符串中的字母应是定义过的。 '''
# 字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个字符串(序列中的元素必须是字符串) list1 = ['abc', '345', 'name'] result = ''.join(list1) # abc345name result1 = '+'.join(list1) # abc+345+name # 将list2中所有元素拼接成一个字符串(推导式的应用) list2 = ['abc', 100, True, 'hello'] new_list2 = ''.join([str(x) for x in list2]) # 将list2中所有的字符串拼接成一个字符串(推导式的应用) result2 = ''.join([x for x in list2 if type(list2) == str])
# 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数 message = 'how are you? i am fine! thank you! and you?' result3 = message.count('you') print(result3)
# 字符串1.index(字符串2) - 获取字符串2第一次出现在字符中的位置(位置是从0开始的下标) # 字符串1.find(字符串2) - 获取字符串2第一次出现在字符中的位置(位置是从0开始的下标) # 在字符串2不存在的时候index会报错,find会不报错并且返回-1 result4 = message.index('you') result5 = message.find('you') result6 = message.rfind('you') # rfind是指从右侧第一次出现的位置
# 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割 # 字符串1.split(字符串2,n) - 最多切n次 注意:无论切割点怎么分布,切完后小字符的个数都是切割点的数量加1 message = 'abcmnabc123abcxyzabcoopabc' result10 = message.split('abc') # ['', 'mn', '123', 'xyz', 'oop', ''] print(result10)
# 字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3 #字符串1.replace(字符串2,字符串3,N) - 只能替换前N个 message = 'how are you? i am fine! thank you! and you?' result11 = message.replace('you', 'me') result12 = message.replace('you', 'me', 2)
# 字符串1.center(长度, 填充字符) # 字符串1.ljust(长度,填充字符) # 字符串1.rjust(长度,填充字符) # 字符串1.zfill(长度) == 字符串1.rjust(长度,0) str1 = 'abc' print(str1.center(9, 'x')) print(str1.rjust(9, 'x')) print(str1.ljust(9, 'x')) print(str1.zfill(9))
# strip - 去掉两边的空格 # rstrip - 去掉左边的空格 # lstrip - 去掉右边的空格 str2 = '\t abc 123 \n' print(str2.strip()) # 去掉两边的空格 print(str2.lstrip()) # 去掉左边的空格’ print(str2.rstrip()) # 去掉右边的空格’
输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**
str1 = 'asdfghjkl123' str2 = '' for x in str1[1::2]: str2 += x print(str2)
输入用户名,判断用户名是否合法(用户名长度6~10位)
name = input('输入用户名:') if 6 <= len(name) <= 10: print('合法') else: print('不合法')
输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
name = input('输入用户名:') count = 0 for x in name: if '0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z': count += 1 else: print('不合法') if count == len(name): print('合法')
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
name = input('输入用户名:') count = 0 if not ('A' <= name[0] <= 'Z'): print('不合法') else: for x in name: if '0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z': count += 1 else: print('不合法') if count == len(name): print('合法')
输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’
str1 = 'abc1shj23kls99+2kkk' num = '' for x in str1: if '0' <= x <= '9': num += x print(num)
输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
str3 = 'abc123' new_str3 = '' for x in str3: if 'a' <= x <= 'z': new_str3 += chr(ord(x) - 32) else: new_str3 += x print(new_str3) # ====================================================== str3 = 'abc123' new_str3 = str3.upper() print(new_str3)
例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'
输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
num = input('输入一个小于1000的数字:') num1 = num.zfill(3) num2 = 'py1901' stu_num = num2 + num1 print(num1) print(stu_num)
输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3
str1 = 'anc2+93-sj胡说' count = 0 for x in str1: if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'): count += 1 print(count)
输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+’**
str1 = 'abc123' str2 = str1.replace(str1[0], '+') str3 = str2.replace(str2[-1], '+') print(str3)
输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1 = input('请输入:') num = len(str1) if num % 2: print(str1[num // 2]) else: print(str1[num // 2 - 1], str1[num // 2])
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1 = 'how are you? Im fine, Thank you!' str2 = 'you' char = str2[0] count = 0 for x in str1: if char != x: count += 1 else: break print(count)
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123' str2 = 'huak3' str3 = '' for x in str1: for y in str2: if x == y: str3 += x break print(str3)