字符
摘要
1. 什么是字符串
a. 字符串是python提供的容器型数据类型(序列),不可变、有序。
- 不可变 - 不支持增删改;
- 有序 - 支持下标操作
b. python中的字符串是用单引号或者双引号引起来的字符集;引号里面的每个基本单元叫字符。
str1 = 'hello'
2. 字符
python中只有字符概念,没有字符类型
a. 普通字符:数字、字母、中文、日语、普通符号等。
str2 = '123a and 你好 #¥%%'
print(type(str2),str2)
b. 转义字符:
在特定的符号前加\来表示特殊功能或者特殊意义的字符
- \n - 换行
- \ ' - 单引号字符(不是字符串开头/结尾标志)
- \" - 双引号本身(不是字符串开头/结尾标志)
- \ - 反斜杠本身(让一个反斜杠失去转义的功能)
- \t - 制表符(相当于tab)
str3 = "1\t2\'3\na\"bc \\none001"
print(str3)
- 阻止转义:在字符串的最前面加r/R,能够阻止字符串中所有的转义字符转义
str4 = r'\thow\nare\nyou\"'
print(str4)
"""
how
are
you"
\thow\nare\nyou\"
"""
'\tabc\n123' # 长度8
r'\tabc\n123' # 长度10
c.1 编码字符:在字符串中用'\u四位的十六进制数'来表示一个字符,\u字符编码值的16进制数
a - 97
b - 98
str5 = '123\u4e11'
print(str5)
c.2 字符编码:
计算机本身只有直接存储数字的能力(存数字的二进制的补码),为了能够存储数字以外的符号,开发人员给每个字符对应一个固定的数字用来对字符进行存储。每个字符对应的固定的数字就是字符的编码值,每个字符和数字的一一对应关系就是字符编码表,常见的编码表有:ASCII码表、Unicode编码表
ASCII码表采用一个字节对字符进行编码:0-127
Unicode编码表采用2个字节对字符进行编码:0-32767,包含了ASCII码表
chr函数:chr(编码值) - 获取编码值对应的字符
ord函数:ord(一个字符) - 获取指定字符对应的编码(十进制的)
print(chr(100), chr(0x4e00))
print(ord('雍'), ord('有'))
# 练习:查看日语所有的片假名
for code in range(0x30a0, 0x30ff):
print(chr(code), end='')
3. 字符串操作:查
a. 获取单个字符
- 语法:字符串[下标] - 获取指定下标对应的字符
- 说明:字符串 - 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
- [] - 固定写法
- 下标 - 又叫索引,值是整数;字符串确定后,字符串中的所有字符都有一个确定的下标/索引表示这个字符在字符串中的位置。python中下标有两种。位置从前往后是 0 ~ 字符串长度-1;位置从后往前是 -1 ~ -字符串长度;
- 注意:获取单个字符的时候下标不能越界
str1 = 'hello'
print(str1[0], str1[3])
print(str1[-1], str1[-5])
str2 = '\tabc 123'
print(str2[2], str2[5])
# print(str2[100]) # string index out of range
# print(str2[-100]) # string index out of range
print('how are you'[2])
b. 获取部分字符(字符串切片)
语法:字符串[开始下标:结束下标:步长] - 从开始下标开始获取,每次增加步长取下一个值; 取到结束下标前为止(结束下标对应的值取不到)
说明:字符串 - 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
[]/: - 固定写法
开始下标 - 下标,整数。能取到对应的字符
结束下标 - 下标,整数。对应的字符取不到
步长 - 整数。如果步长是正数,从前往后取;如果步长是负数,从后往前取
注意:
- 字符串切片的结果都是字符串
- 如果步长是正数,那么开始下标对应的字符要在结束下标对应的字符的前面,才能取到值;如果步长是负数,那么开始下标对应的字符要在结束下标对应的字符的后面,才能取到值;
- 切片的时候下标可以越界
print('===============')
str3 = 'abc=123'
print(str3[0:3:1]) # abc
print(str3[2:-1:1]) # c=12
print('结果:', str3[2:-2:-1]) # ''
print(str3[0:-1:1]) # abc=12
print(str3[-1:2:-1]) # 321=
print(str3[-1:1:-2]) # 31c
print(str3[100:-100:-1]) # 321=cba
c. 获取部分字符的简写
- 省略步长
语法:字符串[开始下标:结束下标] == 字符串[开始下标:结束下标:1]
print('=======')
str4 = 'hello world'
print(str4[3:-2]) # lo wor
- 省略开始下标 - 步长为正从字符串开头往后获取;步长为负从字符串最后往前获取
语法:字符串[:结束下标:步长]、字符串[:结束下标]
print(str4[:5]) # hello
print(str4[:5:-1]) # dlrow
3.省略结束下标 - 步长为正从开始下标往后取到最后一个字符为止;步长为负取到第一个字符为止
语法:字符串[开始下标::步长]、字符串[开始下标:]
str4 = 'hello world'
print(str4[1:]) # ello world
print(str4[1::-1]) # eh
print(str4[:]) # hello world
# 字符串倒序
print(str4[::-1]) # dlrow olleh
d. 遍历字符串 - 将字符串中的字符一个一个的取出来
for 变量 in 字符串:
循环体
- 直接遍历,变量取到的就是字符
for char in str4:
print(char)
- 间接遍历,通过遍历下标遍历字符
for index in range(11):
print(str4[index])
for index in range(-1, -12, -1):
print(str4[index], end='')
# 练习:统计输入的字符串中,字母'a'出现的次数
# 例如:输入'how are you! fine,thanks. and you'
ch = input('输入字符串:')
count = 0
index = -1
for char in ch:
index += 1
if char == 'a':
print(index) # a的下标
count += 1
print(count)
4. 字符串的运算:
a.数学运算符:+,*
- 字符串1+字符串2:两个字符串相加 -> 将两个字符串拼接产生一个新的字符串
str1 = 'abc' + 'hello'
print(str1) # abchello
# str2 = 'abc' + 12 # TypeError: must be str, not int
- 字符串正整数/正整数字符串:字符串重复指定次数产生一个新的字符串
str2 = 'abc' * 3
str2 = 3 * 'abc'
print(str2)
b.比较运算:>,<.>=.<=.!=,==
- 针对两个字符串进行比较
str3 = 'abc'
print('abc' == str3)
- 字符串比较大小:按位置从前往后一对一对的比较,找出第一对不相等的字符,看他们的编码值谁大,哪个字符串就大
print('abcd' > 'az') # False
print('一' > '丑') # False
- 应用:
- 判断一个字符是否是小写字母:'a'<=char<='z'
- 判断一个字符是否是大写母:'A'<=char<='Z'
- 判断一个字符是否是字母:'a'<=char<='z' or 'A'<=char<='Z'
- 判断一个字符是否是数字字符:'0'<=char<='9'
- 判断一个字符是否是中文(4e009fa5):'\u4e00'<=char<='\u9fa5' , '一'<=char<='龥'
# 练习:统计一个字符串中大写字母的个数
value = input('请输入一个字符串:')
count = 0
for char in value:
if 'A' <= char <= 'Z':
count += 1
print(count)
c.赋值运算:=,+=,*=
str5 = '你好'
str5 += 'hello'
print(str5)
str5 *= 2
print(str5)
5. in 和 not in
- 字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('abc' in '123abc') # True
print('abc' in '123ab1c') # False
print('A' in 'hell A') # True
print('A' not in 'hell A') # False
6. len
- len(字符串)_ - 获取字符串长度(字符串中字符的个数)
print(len('abc'))
print(len('\tabc')) # 4
print(len(' abc'))
str6 = ' abc'
print(len(str6)) # 7
print(len('\u4e00abc')) # 4
7. str
- str(数据) - 将其他类型的数据转换成字符串
- 所有类型的数据都可以转换成字符串;转换的时候直接数据的外面加引号
8. 格式字符串:在字符串中用格式占位符代替字符串中变化的部分,在使用数据对变化的部分进行赋值
- 语法:包含格式占位符的字符串%(数据1,数据2,....)
- 说明:数据的个数和类型要和前面字符串中格式占位的个数和类型保持一致
- 格式占位符:
%s - 字符串
%d - 整数
%.Nf - 浮点数(N控制小数点后小数的位数)
%c - 字符、字符对应的编码值
age = int(input('请输入年龄:'))
name = input('姓名:')
money = 3.5
message = '我是%s,今年%d岁,薪资%.2fk,等级%c' %(name,age,money,66)
# message = '我今年XX岁'
# message = '我今年'+str(age)+'岁'
print(message)