字符串
1.字符串
1.什么是字符串
-
字符串是容器型数据类型:将’‘或者’’’’’‘或者“”“”作为容器标志,引号中的每个元素都是字符串的元素。’’’’’'和“” “”在表示字符串内容的时候换行可以不使用转义字符,而是直接回车。
-
字符串不可变,不支持增删改
-
字符串是有序的,支持下标操作
-
字符串的元素:引号中的单独的每个符号都是字符串的元素(字符),任何元素都可以。
-
字符串分两大类:普通字符(表示符号本身)、转义字符
str1 = '90,100' str2 = "abc123+=@" str3 = "abc\n123" str4 = """asc 123 asd """
2.字符串的元素
'''
转义字符:在特定符号前加反斜杠\,让符号具有特殊功能。一个转义字符的长度是1
常见的转义字符
\n - 换行
\t - 水平制服表(相当于tab键的功能)
\' - 表示一个普通的单引号
\" - 表示一个普通的双引号
\\ - 表示一个普通的反斜杠
'''
# \u4位数的十六进制数 - 编码字符
str5 = "it's me"
str6 = 'it\'s me'
print(str6) # it's me
str7 = '\tabc\n123'
print(str7)
str8 = '' # 空串
3.字符编码
1.编码
计算机只能储存数字,而且是保存数字的二进制的补码,文字符号是无法直接储存到计算机的。为了能够让计算机具备储存文字符号的能力,我们给所有的文字符号对应一个固定的数字,每次储存文字符号的时候就吧符号对应的数字储存起来,符号对应的数字就是符号的编码值。
2.编码表
编码表即保存符号和数字对应关系的表
1)ASCII 码表
a.总共有128个,(美国符号)
b.数字在字母的前面,大写字母(65-90)在小写字母(97-122)前面;大写字母和小写字母之间有其他符号,相差32.
2)Unicode编码表
a.是对ASCII码表的扩展,包含了世界上所有的国家所有的民族所有的语言的符号
b.中文范围:4e00~9fa5
3.编码值的应用
'''
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)
2.字符串的相关操作
1.查
字符串获取元素的语法和列表获取元素的语法一模一样。
2.数学运算符
#拼接:用+可以用于字符串拼接
# 练习:提取字符中小写字母
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)
3.比较运算符
# 两个字符串比较大小,比较的是第一队不相等的字符的编码值的大小
'''
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)
4.in 和 not in
# 字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('abc' in 'abc123') # True
print('1' in 'abc123') # True
print('ac' in 'abc123') # False
5.r语法
- 如果在字符串前面加r,那么字符串中所有的转义字符的功能都会消失。(阻止转义)
- 处理windows的路径,先在前面先加个r
- 正则表达式
6.相关函数
'''
len() - 获取字符串长度
str(数据) - 将数据转换成字符串,任何数据都可以转换成字符串;转换的时候是在数据打印值的外边 加引号
eval(字符串) - 可以去掉字符串的引号,获取数据,如果去掉引号后是表达式,就会计算表达式的结果。
字符串中的字母应是定义过的。
'''
3.字符串相关方法
1.join
# 字符串.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])
2.count
# 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
message = 'how are you? i am fine! thank you! and you?'
result3 = message.count('you')
print(result3)
3.index\find
# 字符串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是指从右侧第一次出现的位置
4.split
# 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
# 字符串1.split(字符串2,n) - 最多切n次
注意:无论切割点怎么分布,切完后小字符的个数都是切割点的数量加1
message = 'abcmnabc123abcxyzabcoopabc'
result10 = message.split('abc') # ['', 'mn', '123', 'xyz', 'oop', '']
print(result10)
5.replace
# 字符串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)
6.center\ljust\rjust\zfill
# 字符串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))
7.strip\rstrip\lstrip
# 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])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串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)