"""author = Zard""
1.什么是字符串(str)
- 字符串属于容器型数据类型,又叫序列。将引号(可以是单引号也可以是双引号)作为容器,字符是元素
- 不可变(字符个数,字符的值和顺序不可变),有序(字符的顺序不同,字符串的值也不同)
- print('hello' == 'heoll') --False #字符串有序
- print('{1,2,3}' == '{2,3,1}')--True #集合无序
2.字符串中的内容
- 字符串中的、每个基本单元就是字符:python中有字符的概念,但是没有字符对应的数据类型
1)普通字符:例如,字母,数字,文字,符号
2)转义字符:在指定的符号前加 \ 来表示一些具有特殊功能或者特殊意义的符号
\n - 换行
\t - 制表符,相当于TAB
' - 一个单引号
" - 一个双引号
\ - 一个反斜杠
3).编码字符:用\u加四位十六进制编码值,表示一个编码值对应的字符
str = '\u4eff\u0061' ---'仿a'
4).编码:计算机存储字符的时候实质存的是字符对应的编码值,每一个字符的编码是固定的。
- 计算机本身只有存储数字的能力,而且存的是数字的补码
- 字符和字符的编码的一一对应关系叫编码表,常见的编码表有2个:ASCII表和Unicode表,python的字符采用的是Unicode编码
- (Unicode是对ASCII表的扩充,包含了世界上所有的语言符号)
- 中文的编码范围:0x4e00 - 0x9fa5
- chr(编码值) --- 获取编码值对应的字符 print(chr(97)) --- a
Unicode部分编码:
num = 0
for code in range(0x0900,0x097f):
num += 1
if num % 40 == 0:
print()
print(chr(code),end=' ')
print(hex(ord('王')))
5)阻止转义:字符串的最前面加r/R可以阻止当前字符串中的所有转义字符转义
- 注意一个转义字符和一个编码字符的长度都是1.加r/R后就都是一个一个的字符
- str = r'\tabc\n123\u4e03'
3.获取字符
1)获取单个字符
a.语法
字符串[下标] - 获取指定下标对应的字符
2).说明
- 字符串 - 可以是字符串值、字符串变量或者结果是字符串的表达式
- [] - 固定写法
- 下标 - (又叫索引)字符串一旦确定,那么字符串中的每个字符的位置就确定了,每个字符都会对一个固定的下标来表示字符在字符串中的位置下标的值有两种:0-字符串长度-1;-1至-字符串长度
(下标0对应的是第一个字符,下标-1对应最后一个字符)
3)注意:下标不能越界,否则会报IndexError
4.获取部分字符(字符串切片)
1).语法1
字符串[开始下标:结束下标:步长]--从开始下标开始获取,每次增加步长去取下一个字符, 直到获取到结束下标前为止
2)说明
字符串 - 字符串值或者字符串变量
[] --- 固定写法
开始下标,结束下标 -- 下标值
步长 --- 整数
3)注意
a.结束下标对应的字符永远取不到 "" -- 空串
b.当步长为正,开始下标到结束下标从前往后取,此时开始下标的对应的字符必须在结束下标对应的字符的前面当步长为负,开始下标到结束下标从后往前取,此时开始下标的对应的字符必须在结束下标对应的字符的后面
c.下标可以越界(获取部分时)
str2 = ‘hello+python’
print(str[-1:4:-1])
print(str(3:1:1)) --空串
5.获取部分字符2
1)省略步长:
步长为1
字符串[开始下标:结束下标] --从开始下标到结束下标前,从前往后一个一个取
2)省略开始下标:
字符串[:结束下标:步长]、字符串[:结束下标]
步长为正,从第一个字符开始往后取;步长为负:从最后一个字符开始往前取
3)省略结束下标:
字符串[开始下标::步长]、字符串[开始下标:]
步长为正,从前往后取到最后一个字符;步长为负,从后往前取到第一个字符
4)省略下标
字符串[::步长]、字符串[:]
6.遍历字符串
1)直接遍历拿到每个字符
for 变量 in 字符串:
循环体
循环过程中变量取到的就是字符串中的每个字符
for in '123'[::-1]
print() # 从后往前遍历
2).通过遍历下标遍历字符串
len(字符串) -- 获取字符串的长度(即字符的个数)
for index in range(len(str4)):
print(index,str(index))
或者: for index in range(-1.-len(str)-1,-1)
7.数学运算:+ , *
1)字符串1+字符串2 将两个字符串拼接在一起产生一个新的字符串
注意:字符串只能和字符串相加
2)字符串N / N字符串 -- 字符串重复N次产生一个新的字符串
8.比较运算
1)比较相等: == , !=
2)比较大小: >,<,<=,>=
字符串比较大小,比较的是字符串第一对不相等的字符的编码值的大小
a.判断一个字符是否是大写字母,或者小写字母,是否是中文等
str4 = '你好吗?hello^_^;Oh~天哪!'
count = 0
count1 = 0
for x in str4:
# 判断是否是小写字母
if 'a' <= x <= 'z':
count += 1
# 判断是否是中文
if '\u4e00' <= x <= '\u9fa5':
count1 += 1
print(count)
print(count1)
count = 0
for x in str4:
# 判断是否是字母
if 'a' <= x <= 'z' or 'A'<= x <= 'Z':
count += 1
print(count)
# 判断是否是数字:'0' <= x <= '9'
9.in / not in
字符串1 in 字符串2 判断字符串2是否包含字符串1
字符串1 not in 字符串2 判断字符串2是否不包含字符串1
10.len()
len(序列) - 获取序列的长度(序列中元素的个数)
11.str(数据) --- 将指定数据转换成字符串
所有的数据都可以转换成字符串;直接在数据的外面加引号
12、格式字符串:在字符串中用格式占位符来表示字符串中变化的部分
1)语法
包含格式占位符的字符串 % (格式占位符对应的多个数据)
%s --- 字符串的格式占位符
%d --- 整数
%f --- 小数 #用 %.nf 可以用n来约束小数的位数
%c --- 字符 (可以将数字转换成字符,联想chr)
可以研究下 format
13.字符串相关的方法
使用:字符串.函数名(参数)
1)对齐方式:
字符串.centter(宽度,填充字符) "abc"
字符串.cljust(宽度,填充字符) "abc******"
字符串.rjust(宽度,填充字符) "******abc"
**字符串.zfill(宽度) == 字符串.rjust(宽度,'0') ---产生学号,标号等等
num = 15
student_id = 'python1903'+str(num).zfill(3)
print(student_id) # python1903015
2)统计个数
字符串1.count(字符串2) ---统计字符串1中字符串2的个数
str5 = 'sajdiaohfapfhsaiohgahdspaojdaupdah'
print(str5.count('sa'))
3)join函数
字符串.join(序列) -- 将序列中的元素用指定的字符串连接在一起产生一个新的字符串
注意:序列的元素必须是字符串
print(''.join('abc')) #ab*c
print(''.join(['a','b','c','d'])) #abcd
4)去掉空白-strip
str6 = ' 数学 '
print('|'+str6+'|') # | 数学 |
str_new = str6.lstrip()
print('|'+str_new+'|') # |数学 |
str_new2 = str6.rstrip()
print('|'+str_new2+'|') # | 数学|
str_new3 = str6.strip()
print('|'+str_new3+'|') # |数学|
5)字符串替换
字符串.replace(字符串1,字符串2) -- 将字符串中的字符串1替换成字符串2
6)字符串切割
字符串.split(字符串1) -- 将字符串按照字符串1进行切割,结果是包含多个小字符串的列表
str7 = 'how are you? i am fine!'
print(str7.split(' ')) # ['how', 'are', 'you?', 'i', 'am', 'fine!']