python基础知识-字符串
一.字符串
1.认识字符串
(1)字符串是容器型数据类型(能同时保存多个文字符号);将单引号,双引号或者三个单引号,三个双引号作为容器标志。里面的每一个符号都是字符串中的元素。(三个单引号和三个双引号放在不同位置的作用不同;注释:文件开头,函数的开头,类的开头;其余位置都是作为字符串的引号作用)
多行字符串-可以任意换行(“”" “”"或者’‘’ ‘’')
str1='小明'
str2="小明"
str3=''' 小明'''
str4=""" 小明"""
(2)字符串不可变;字符串有序(支持下标)
(3)字符串的元素:字符串引号中的每一个独立的符号都是字符串的元素,字符串的元素又叫字符;任何文字符号都可以是字符串的元素(包括英文符号,中文符号,阿拉伯数字,表情符号,汉语,日语…)
#1.空串(不能有任何符号,包括空格)
str6=''
print(type(str6),len(str6))
str7=' '
print(type(str7),len(str7))
#<class 'str'> 0
<class 'str'> 1
2.字符
字符串中字符分为两种:普通字符和转义字符
(1)普通字符——在字符串中表示符号本身的字符就是普通字符
#如果输出的字符和字符串中的字符一致
(2)转义字符:在字符串中有特殊意义或者特殊功能的符号就是专业字符(在特定的符号前面加一个 \ 来表示特殊意义或者特殊功能)
- \n——换行(相当于按回车),\t——水平制表符(相当于按tab键)
- \'——表示普通的单引号;\"——表示普通的双引号;\\——表示普通的反斜杠
(3)r字符串:在字符串的引号前面加r或者R,可以让字符串中所有的转义字符串的功能都失效(让所有字符都变成普通字符)
#原本\n和\a会转义,加了r将所有的转义功能失效
path=r"C:\nudows\app\pacg\a.txt"
print(path)
#
C:\nudows\app\pacg\a.txt
3.字符串的查询
1.字符串的查:字符串获取字符的方法和列表的获取元素的方法一样
-
1.获取单个字符
字符串[下标]
注意转义字符的长度是1
-
字符串切片
字符串[开始下标:结束下标:步长]
str1="good good study!" print(str[1:-2:2]) #odgo td
-
遍历字符串
for i in range(len(str1)): print(i,str1[i]) #结果 0 g 1 o 2 o 3 d 4 5 g 6 o 7 o 8 d 9 10 s 11 t 12 u 13 d 14 y 15 ! #方法2:for i,j in enumerate(str1): #print(i,j)
4.字符串的相关运算
1.字符串的加法运算———字符串拼接
- 字符串1+字符串2——将两个字符串合并成一个字符串
str1="hello"
str2="你好"
print(str1+str2)
#"hello你好"
print(str1+' '+ str2)
#hello 你好
#案例1
#提取所有字符串中的所有数字字符
str1='世界上442,。;’//'
new-str1=''
for i in str1:
if '0'<=i<='9':
new_str1+=i
print(new_str1)
#案例
#在每一个数字后面插入一个%
str1='世界上442,。;’//'
new-str1=''
for i in str1:
if '0'<=i<='9':
new_str1+=i+'%'
else:
new_str1+=i
print(new_str1)
#案例
#将字符串中的所有数字字符都改成'+'
str1 = '世界上442,。;’//'
new_str1 = ''
for i in str1:
if '0' <= i <= '9':
new_str1 += '+'
else:
new_str1 += i
print(new_str1)
#世界上+++,。;’//
2.字符串的乘法运算
- 字符串*N或者N**字符串——让字符串中的元素重复出现N次产生一个新的字符串
3.字符串的比较运算
- 比较是否相等:==,!=
- 比较大小:两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小
4.in和not in
-
字符串1 in 字符串2——字符串1是否是字符串2的子串(字符串2是否包含字符串1)
print('a' in 'abc')#True print("ab" in "abc")#True print("ac" in "abc")#False,必须连续在一起
5.判断字符的性质
- 是否是数字字符:‘0’<=i<=‘9’
- 是否是小写字母:‘a’<=i<=‘z’
- 是否是大写字母:‘A’<=i<=‘Z’
- 是否是字母:‘a’<=i<=‘z’ or ‘A’<=i<=‘Z’
- 是否是中文:‘\u4e00’<=i<=‘\u9fa5’
6.相关函数
(1)max,min,sorted
print(max("helloworld"))#w
print(sorted('helloworld'))#是一个列表
(2)len(字符串)
(3)str(数据)–任何数据都可以转换为字符串;转换的时候是在数据的打印值外面加引号
list1=['yuting',18,'女']
print(str(list1))
#同时如果有多个形式的引号,会统一为单引号
#['yuting',18,'女']
['yuting', 18, '女']#结果多了个空格,即规范格式
(4)eval(字符串)——去除字符串的引号,获取引号中表达式的结果(功能超级强大)
eval('100')
eval('1.23')
b1=eval('10'+'20')
#
a=int(input("请输入a的值:"))
b=int(input("请输入b的值:"))
value=input("请输入value的值(+,-,*,/):")
result=eval(f'a{value}b')
print(result)
#
请输入a的值:10
请输入b的值:20
请输入value的值:+
30
7.字符串的相关方法
形式:字符串.XXX
1.字符串.join(序列)-将序列中的元素用指定的字符串来连接成一个新的字符串(序列中的元素必须全是字符串)
list1=["a","b","c"]
result='+'.join(list1)
print(result)
#a+b+c
nums=[88,98,55,45]
#注意不能直接将nums转换为列表,会出出现每个数字都会被拆成单个然后用+来连接。先遍历取出每个数字,再将其转换为字符串
result=' + '.join([str(i) for i in nums])
print(result)
2.字符串1.count(字符串2)-统计字符串1中字符串2的个数
msg='how are you doing now? i am teaching my sister !'
result=msg.count('a')
pritn(result)
print(msg.count('you'))
#3 1
- 字符串1.split(字符串2)-将字符串1中所有的字符串2作为切割点对字符串1进行切割(返回的是一个列表)
msg='how are you doing now? i am teaching my sister !'
result=msg.split("you")
print(result)
#结果
['how are ', ' doing now? i am teaching my sister !']
-
字符串1.split(字符串2,N)-将字符串1中前N个字符串2作为切割点对字符串1进行切割(返回的是一个列表)
msg='how are you doing now? i am teaching my sister !' result=msg.split(" ",3) print(result) #['how', 'are', 'you', 'doing now? i am teaching my sister !']
-
字符串1.replace(字符串2,字符串3)-将字符串1中的所有的字符串2替换为字符串3
msg='how are you doing now? i am teaching my sister !' result=msg.replace("you",'me') print(result) #how are me doing now? i am teaching my sister ! #另类用法:可以用来删除某个字符串(替换为空) msg='how are you doing now? i am teaching my sister !' result=msg.replace("you",'') print(result) #how are doing now? i am teaching my sister !
-
字符串1.replace(字符串2,字符串3,N)-将字符串1中的前N个字符串2替换为字符串3
msg='how are you doing now? i am teaching my sister !' result=msg.replace("you",'+',2) print(result) #将前两个you替换为+ #how are + doing now? i am teaching my sister !
5.字符串.strip(空白字符)–将字符串左右两边的空白字符(包括空格,换行…)删除
msg='how are you doing now? i am teaching my sister !'
print(msg)
print(msg.strip())
#
how are you doing now? i am teaching my sister !
how are you doing now? i am teaching my sister !
6.字符串.isupper()–判断字符串是否是纯大写字母字符串
字符.isupper()–判断字符是否是纯大写字母字符
7.字符串.islower()–判断字符或者字符串是否全是小写祖母
8.字符串.isdigit()–判断字符或者字符串是否全是数字字符
9.字符串.upper()–将字符串转换为大写字母
字符.upper()–将字符转换为大写字母
10字符串.lower()–将字符串转换为小写字母
字符.upper()–将字符转换为小写字母
#应用:判断是否是字母
char='sdfas'
if char.islower() or char.isupper():
print("char是字母")
else:
print("char不是字母")
#一般逻辑:判断是否在大写字母或者小写字母
if 'a'<=char<='z' or 'A'<=char<='Z':
print("char是字母")
else:
print("char不是字母")
8.格式字符串
解决的问题:字符串内容不确定
1.语法:包含格式占位符的字符串%(数据1,数据2,数据3…)
注意()中的数据必须和前面字符串中的占位符一一对应
2.常见的格式占位符:
- %s:可以给任何类型的数据据占位(原样输出)
- %d:可以给任何数字占位(整数占位符,如果给的数字是小数,会自动转换为整数再拼接到字符串中)
- %f:可以给任何数字占位(浮点占位符)
- %.Nf:可以控制保留N个小数(N不声明默认是保留六位小数)
name=input("请输入学生的名字:")
age=int(input("请输入年龄:"))
#输出:XXX今年XX岁
#方法1:字符串拼接;
#注意字符串的拼接只能对字符串进行操作,age为整型,不能进行拼接,要转换为字符串
msg=name+'今年'+str(age)+'岁'
print(msg)
#方法2,格式字符串-包含占位符的字符串
#格式占位符必须和数据一一对应
name=input("请输入学生的名字:")
age=int(input("请输入年龄:"))
msg="%s今年%s岁"%(name,age)
print(msg)
#
请输入学生的名字:张三
请输入年龄:28
张三今年28岁
#%.Nf
result='用去%.2f元,还剩余%.2f元'%(41.50,99.87)
print(result)
#用去41.50元,还剩余99.87元
-
f-string:在字符串的最前面(引号前面)加一个f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容
name=input("请输入学生的名字:") age=int(input("请输入年龄:")) msg=f'{name}今年{age}岁' print(msg) a=1.234 b=2.3 print(f'{a}+{b}={a+b}') 1.234+2.3=3.534 #{表达手机:.Nf}-控制小数保留位数 a=1.234 b=2.3 print(f'{a:.2f}+{b:.3f}={a+b:.0f}') 1.23+2.300=4 #{表示式:.N%}-控制数字显示成百分比,N控制百分比小数位数 c=0.98 print(f'{c:.0%}') #{表达式:,.Nf}-标准金额拼接 d=357000 print(f'{d:,.2f}') #357,000.00
二.字符串编码
1.计算机存储方式
计算机存储只能存数字(存的是数字的二进制补码)
1.1 字符编码
为了能让计算机存储文字符号,给每个符号对应了了一个固定的数字,每次再需要存储这个符号的时候,就去存储这个固定的数字,每个对应的那个数字就是这个符号的编码值。
1.2 编码表
保存字符和字符对应的编码表
(1)ASCII表(美国信息码:只包含了美国人常用的符号,共128个)
数字字符;大写字母(A-65开始);小写字母(a-97开始));英文输入法下的特殊符号
(2)Unicode表(python)统一码或者万国码:包含了世界上所有国家所有民族的所有语言符号
- Unicode编码表包含了ASCII(前128个字符就是ASCII码表中的内容)
- 中文编码范围:(0x)4e00-(0x)9fa5(0x-十六进制,不加0x则是十进制)
1.3编码值的使用
(1)chr(编码值)-获取编码值对应的字符
print(chr(97))
print(chr(0x4e00),chr(0x9fa5)#最开始的一个字符和最后一个字符
#a
#一, 龥
(2)ord(字符)-获取指定字符串对应的编码值(十六进制)
注意:字符指的是长度为1的字符串
print(ord("a"))
#97
#将小写字母转为大写字母(小写字母和大写字母之间差为32)
char="m"
print(chr(ord(char)-32))
#M
(3)编码字符:\u4位的16进制编码值
在字符串中提供字符的方式有两种:a.直接提供字符;b.使用编码字符
#hex(十进制数)-获取指定数字对应的16进制表达方式
#注意hex()中可以转换任何进制的数为16进制
str1='a'
print(a)
#如果我们直到字符编码值是多少,但是不知道字符是什么的时候,就可以使用编码值来表示这个字符
str2='\u0061'
print(str2)
#a.
#判断是否是中文
char='a'
if '一'<=char<='\u9fa5':#在知道第一个中文开始的情况下或者用编码范围(4e00-9fa5)
print(char,"是中文字符")
else:
print(char,"不是中文字符")