字符串(2021-9-26)
1、什么是字符串(str)
1)字符串是容器数据类型;将’’、""、’’’’’’、""""""作为容器的标志,里面直接多个符号,每一个符号就是字符串的一个元素:‘元素1元素2元素3…’
2)字符串不可变;字符串是有序的
3)元素 - 所有的符号都可以作为字符串的元素;字符串中的元素又叫字符;字符分为普通字符和转义字符两种
a、字符串的元素(字符)可以是任意符号
str1 = 'afm,/.vrw.kin的vjufeINH*(#!*124'
print(str1) # afm,/.vrw.kin的vjufeINH*(#!*124
b、空字符串
str2 = ''
str3 = ""
str4 = ''''''
str5 = """"""
print(type(str4), len(str4)) # <class 'str'> 0
c、多行字符串
str1 = 'abc
123 ' # 报错
st1 = '''
faf
123'''
print(st1) # faf
# 123
str2 = 'abc\n123'
print(str2) # abc
# 123
4)字符串是有序的
print('abc' == 'acb') # 报错
2、字符串中的元素 - 字符
1)普通字符 - 符号在字符串中表示符号本身的字符就是普通字符
2)转义字符 - 在特定符号前加\表示特殊功能或者特殊意义的字符
\n - 换行
\t - 水平制表符(相当于tab键)
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠
\u4四的16进制数 - 编码字符(四的16进制数是字符的编码值)
str1 = '\tabc\n123'
print(str1)
str2 = 'It\' OK'
print(str2) # It' OK
str3 = "It' OK"
print(str3) # It' OK
双引号同理
str5 = 'C:User\\name\test\小明'
print(str5) # C:User\name est\小明
str6 = '\u4e00123'
print(str6) # 一123
3、字符编码
1)计算机在存储数据的时候只能存数字(数字的二进制补码)
2)为了能够让计算机存储字符,给每个字符对应了一个固定数字。每次在存在这个字符的时候就存储这个字符对应的数字。
每个字符对应的数字就是这个字符的编码值。
例:‘a’ - 97
4、编码表 - 记录字符和数字对应的关系的表
常用的编码表:ASCII码表、Unicode编码表(Python)
1)ASCII码表:
a、只记录了美国的符号(这里没有记录中文)
b、数字字符在大写字母的前面,大写在小写字母的前面,并且这三类符号之间不连续
2)Unicode编码表:
a、是ASCII码表的扩展(包含了ASCII码表),记录了世界上所有的国家所有的名族的所有语言的符号
b、中文范围:4e00 ~ 9fa5
5、编码值的使用
1)chr(编码值) - 获取编码值对应的字符
print(chr(97)) # a
print(chr(0x5fa5)) # 徥
练习:打印所有中文
num = 0
for a in range(0x2800, 0x28ff+1):
num += 1
print(chr(a), end=' ')
if num == 30:
print()
num = 0
2)ord函数
ord(字符) - 获取字符编码值
print(ord('杜'), ord('正'), ord('勇')) # 26460 27491 21191
3)编码字符
\u四位的16进制编码值
print('a\u0061') # aa
判断是不是中文
c = '你'
if '\u4e00' <= c <= '\u9fa5':
print('中文') # 中文
6、进制
1)十进制
基数:0 ~ 9
表示方式:直接写
num = 32567627
print(num) # 32567627
2)二进制
基数:0、1
表示方式:加前缀0b/0B
num = 0b101
print(num) # 5
3)八进制
基数:0 ~ 7
表示方式:加前缀0o/0O
num = 0o352 # 234
print(num)
4)十六进制数
基数:0 ~ 9 ~ a ~ f(A ~ F)
表示方式:加前缀0x/0X
转换函数:hex(数据)
num = 0xaf2
print(num) # 2802
7、字符串相关操作和相关函数
1)查 - 获取字符
字符串获取字符和列表获取元素的语法一样
str1 = 'do you like LOL? Yes I do!'
print(str1[3], str1[-1]) # y !
注意:一个转义字符的长度是1
str1 = '\tabc\n123\u6afa'
print(str1[1], str1[-1]) # a 櫺
print(str1[1:6]) # abc
# 1
print(str1[-1:2]) #
print(str1[1:7:2]) # ac1
print(str1[-1::-2]) # 櫺2
# b
print(str1[2:]) # bc
# 123櫺
print('-----------------------------------------------------------------')
for a in str1:
print(a)
2)+、*
print('abc' + 'hello') # abchello
print('abc' * 3) # abcabcabc
3)比较运算
a、两个字符串比较大小,比较的是第一对不相等字符的编码值的大小
b、两个字符比较大小,比较的是字符的编码值的大小
已知字符X:
判断是否是数字字符:‘0’ <= X <= ‘9’
print('abc' == 'acb') # False
print('abc' > 'Abc123') # True
print('你好' > 'hello') # True
练习:已知一个字符串,统计字符串中中文出现的次数
str1 = '-==sh是uM09K你好!'
num = 0
for chi in str1:
if '\u4e00' <= chi <= '\u9fa5':
num += 1
print(num)
练习2:判断指定字符串是否是纯数字字符串
'234445' -> 是 '122h2333' -> 不是
str1 = '234445'
str2 = '122h2333'
list1 = ['234445', '122h2333']
for st in str1:
if not '0' <= st <= '9':
print('不是')
break
else:
print('是')
练习3: 提取字符串中所有的大写字母
'-==sh是uM09K你好!' -> 'MK'
str3 = '-==sh是uM09K你好!'
str4 = ''
for a in str3:
if 'A' < a <= 'Z':
str4 += a
print(str4)
4)in 和 not in
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串
print('a' in 'abc') # True
print('ac' in 'abc') # False
5)相关函数
a、len(字符串)
b、str(数据) - 将数据转换成字符串(任何类型数据都可以转换成字符串;转换的时候直接在数据的打印值外面加引号)
x = 23
str(23) # '23'
str(12.5) # '12.5'
str([10,20]) # '[10, 20]'
str({'a': 10, "b": 20})
print({'a': 10, "b": 20}) # "{'a': 10, 'b': 20}"