1. 字符串(str)
- 字符串是python提供的容器型数据类型(序列),不可变、有序
- 不可变:不支持增删改;有序:支持下标操作
- python中的字符串是用单引号或者双引号引起来的字符集;引号里面的每个基本单元叫字符
2. 字符
1)普通字符
2)转义字符:
- 在特定的符号前加 \ 来表示特殊功能或者特殊意义的字符
- \n :换行(相当于回车键)
- \ ' :单引号本身(不是字符串开头/结尾标志)
- \ " :双引号本身(不是字符串开头/结尾标志)
- \ \ :反斜杠本身(让一个反斜杠失去转义的功能)
- \t :制表符(相当于tab键)
- 阻止转义:在字符串的最前面加r/R,能够阻止字符串中所有的转义字符转义
str4 = R'\thow\nare\nyou\"'
print(str4) # \thow\nare\nyou\"
3)编码字符:
- 在字符串中用 ' \u四位的十六进制数 ' 来表示一个字符
- \u字符编码值的16进制数
str5 = '123\u4e11'
print(str5) # 123丑
3.1)字符编码:
- 计算机本身只有直接存储数字的能力(存数字的二进制的补码),为了能够存储数字以外的符号,开发人员给每个字符对应一个固定的数字用来对字符进行存储。
- 每个字符对应的固定的数字就是字符的编码值;每个字符和数字的一一对应关系就是字符编码表;常见的编码表有:ASCII编码表、Unicode编码表
- ASCII码表采用一个字节对字符进行编码:0-127
- Unicode编码表采用2个字节对字符进行编码,包含了ASCII码(python用的Unicode编码表)
- 拓展:中文Unicode编码范围 4E00-9FA5:CJK 统一表意符号 (CJK Unified Ideographs)
3.2)chr函数:
3.3)ord函数:
# 练习:查看日语的所有片假名
for code in range(0x4dc0, 0x4dff):
print(chr(code))
3. 字符操作:查
1)获取单个字符
- 语法:字符串[下标] ------ 获取指定下标对应的字符
- 说明:
字符串 ----- 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
[ ] ----------- 固定写法
下标 -------- 又叫索引,值是整数;字符串确定后,字符串中的每一个字符都有一个确定的下标 / 索引表示这个字符在字符串中的位值
python中下标有两种:位置从前往后是 0~字符串长度-1;位置从后往前是 -1 ~ - 字符串长度
- 注意:获取单个字符的时候下标不能越界
2)获取部分字符(字符串切片)
- 语法:字符串[开始下标:结束下标:步长] ---- 从开始下标开始获取,每次增加步长取下一个值,取到结束下标前为止(结束下标对应的值取不到)
- 说明:
字符串 ----------- 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
[ ] ------------------ 固定写法
开始下标 -------- 下标,整数;能取到对应的字符
结束下标 -------- 下标,整数;对应的字符取不到
步长 -------------- 整数。如果步长是正数,从前往后取;如果步长是负数,从后往前取
- 注意:
a. 字符串切片的结果都是字符串;
b. 如果步长是正数,那么开始下标对应字符要在结束下标对应字符的前面,才能取到值;如果步长是负数,那么开始下标对应字符要在结束下标对应字符的后面,才能取到值
c. 切片的时候下标可以越界
3)获取部分字符的简写
-
省略步长:步长为1的时候可以省略不写 ----- 字符串[开始下标:结束下标] 即 字符串[开始下标:结束下标:1]
-
省略开始下标:步长为正从字符串开头往后获取;步长为负从字符串最后往前获取 ------ 字符串[:结束下标:步长]、字符串[:结束下标]
-
省略结束下标:步长为正,取到字符串最后一个字符为止;步长为负,取到第一个字符为止 ----- 字符串[开始下标::步长]、字符串[开始下标:]
# 字符串倒序
str4 = 'hello world'
print(str4[::-1]) # dlrow olleh
4.遍历字符串
for 变量 in 字符串:
循环体
str4 = 'hello world'
for char in str4:
print(char)
str4 = 'hello world'
for index in range(11):
print(str4[index])
for index in range(-1, -11, -1):
print(index, str4[index])
value = input('请输入一个字符串:')
count = 0
for char in value:
if char == 'a':
count += 1
print(count)
5.字符串相关操作
1)字符串的运算
-
数学运算:+,*
a. 字符串1+字符串2:两个字符串相加,将两个字符串拼接产生一个新的字符串
b. 字符串 * 正整数 / 正整数 * 字符串:字符串重复指定次数产生一个新的字符串
-
比较运算:>,<,>=,<=,==,!=
字符串比较大小:按位置从前往后一对一对的比较,找出第一对不相等的字符,看它们的编码值谁大,那个字符串就大
应用:
判断一个字符是否是小写字母: 'a'<=char<='z'
判断一个字符是否是大写字母: 'A'<=char<='Z'
判断一个字符是否是字母: 'a'<=char<='z' or 'A'<=char<='Z'
判断一个字符是否是数字字符: '0'<=char<='9'
判断一个字符是否是中文(4e00-9fa5): '\u4e00'<=char<='\u9fa5', '一'<=char<='龥'
# 练习: 统计一个字符串中大写字母的个数
# 例如: How Are You! -> 3
str4 = 'How Are You!'
count = 0
for char in str4:
if 'A' <= char <= 'Z':
count += 1
print(count)
2)in 和 not in
- 字符串1 in 字符串2:判断字符串2中是否包含字符串1
print('abc' in 'a123abc') # True
print('abc' in '123ab1c') # False
print('A' in 'hell A') # True
print('A' not in 'hello A') # False
3)len
- len(字符串):获取字符串长度(字符串中字符的个数)
print(len('\tabc')) # 4
str6 = ' abc'
print(len(str6)) # 7
print(len('\u4e00abc')) # 4
for index in range(len('husjssas')):
print(index)
4)str
- str(数据):将其他类型数据转换成字符串
- 所有类型的数据都可以转换成字符串:转换的时候直接在数据的外面加引号
print(str(100)) # '100'
print(str(12.5)) # '12.5'
print(str(True)) # 'True'
5)格式字符串
- 在字符串中用格式占位符代替字符串中变化的部分,然后再使用数据对变化的部分进行赋值
- 语法:包含格式占位符的字符串 %(数据1,数据2,...)
- 说明:数据的个数和类型要和前面字符串中格式占位符的个数和类型保持一致
- 格式占位符:%s --- 字符串;%d --- 整数 ;%.Nf --- 浮点数(N控制小数点后小数的位数);%c --- 字符、字符对应的编码值
name = input('姓名:')
age = int(input('请输入年龄:'))
money = 3.5
message = '我是%s, 今年%d岁, 薪资:%.1fk 等级:%c' % (name, age, money, 66)
print(message) # 我是ann, 今年18岁, 薪资:3.5k,等级:B
# 方法二
name = input('请输入姓名:')
print(f'hello, {name}')
6. 字符串的对象方法
1)字符串.capitalize()
str1 = 'abc'
print(str1.capitalize()) # Abc
print(str1) # abc
2)设置对齐方式
-
字符串.center(width, fillchar):让字符串在新字符串中居中,width控制新字符串的宽度,fillchar是填充字符
- 字符串.rjust(width, fillchar)
- 字符串.ljust(width, fillchar)
-
字符串.zfill(width) : 等于字符串.rjust(width, '0')
3)字符串1.count(字符串2)
4)字符串1.find(字符串2)
- 返回字符串2在字符串1中第一次出现的下标(0~长度-1的下标);找不到返回-1
-
字符串1.find(字符串2, startindex, endindex):指定范围中进行查找
5)字符串.join(序列)
- 将序列中元素取出来,中间用指定字符串拼接在一起产生一个新的字符串
6)max和min
-
max(序列):获取序列中的最大值
-
min(序列):获取序列中的最小值
7)字符串.replace(old,new)
- 将字符串中指定的旧字符串全部替换成新的字符串
-
字符串.replace(old,new,替换次数):指定替换次数
8)字符串1.split(字符串2)
9)字符串.title()
- 返回"标题化"的字符串,就是说所有单词的首字母都转化为大写