刚过完年,这一章主要是字符串,正则表达式后续会单独开一章来详细的讲解。
五.字符串与正则表达式(正则表达式后面单独开一章来讲解)
1.字符串编码
在计算机内部,字符都是以某种编码的方式进行存储和处理的。就是字符编码提供一种映射,使屏幕上显示的内容和内存、磁盘中存储的内容对应起来。
s = '我' #默认为Unicode编码
print(len(s))
s = s.encode('utf-8') #指定为UTF-8编码
print(len(s))
print(s[0],s[1],s[2]) #分别输出“我”的3个字节编码的值(十进制)
s = s.decode('utf-8') #解码为Unicode编码
s = s.encode('gbk') #指定为GBK编码
print(len(s))
s = s.decode('gbk') #解码为Unicode编码
print(len(s))
print(ord(s))
print(s[0])
--------------------------------------------------------------
1
3
230 136 145
2
1
25105
我
2.字符串的索引与分片
1.索引
s = 'hello'
print(s[0],s[-4])
h e
#当超出索引范围的时候,会报错下面的索引超出范围错误
print(s[5])
IndexError: string index out of range
#当出现这种错误的时候,是类型错误
print('H')
TypeError: string indices must be integers
2.分片
s = 'Hello World!'
print(s[0:7:2])
HloW
s = 'Hello World!'
print(s[-1:-5:-1])
!dlr
s = 'ABCDEFGIJK'
print(s[-100:100])
ABCDEFGIJK
3.字符串的操作
在python里面呢,字符串可以进行逻辑操作,还有连接操作。
1.字符串连接操作
(1)基本连接操作
print("wo"+"ai")
woai
print("age"+str(20))
age20
在python中,字符串是不可变类型:
s = 'abcdes'
s[1] = "2"
TypeError: 'str' object does not support item assignment
(2)重复连接操作
a = "ABC" * 2
print(a)
ABCABC
2.字符串逻辑操作
(1)单个字符比较,是比较字符的ASCII码
print('D'<'B')
False
print('8'>'2')
True
(2)等长字符比较,是从左往右一个一个比较,直到其中一个ASCII码大于另一个
print("SHANGHAI"<"SHANKONG")
True
(3)不等长字符比较,短字符后面补齐空格后比较
print("WHERE"<"WHEREVER")
True
4.字符串的常用方法
(1)字母大小写转换
- s.upper()????????????????转为大写字母
- s.lower()? ? ? ? ? ? ? ? ?转为小写字母
- s.swapcase()? ? ? ? ? 字母大小写互换
- s.capitalize()? ? ? ? ? ?首字母大写,其余小写
- s.title()? ? ? ? ? ? ? ? ? ? 首字母大写
s = "Wo Shi yyx"
print(s.upper())
print(s.lower())
print(s.swapcase())
print(s.capitalize())
print(s.title())
----------------------------
WO SHI YYX
wo shi yyx
wO sHI YYX
Wo shi yyx
Wo Shi Yyx
(2)字符串对齐处理
- s.ljust(width,[fillchar])? ? ? ? ? ?输出width个字符,s左对齐,右边不足部分用fillchar填充
- s.rjust(width,[fillchar])? ? ? ? ? ?输出width个字符,s右对齐,左边不足部分用fillchar填充
- s.center(width,[fillchar])? ? ? ? 输出width个字符,s中间对齐,两边不足部分用fillchar填充
- s.zfill(width,[fillchar])? ? ? ? ? ? ?把s变成width长,并且右对齐,左边不足部分用0补齐
s = "Wo Shi yyx"
print(s.ljust(50,'*'))
print(s.rjust(50,'*'))
print(s.center(50,'*'))
print(s.zfill(50))
-----------------------------------
Wo Shi yyx****************************************
****************************************Wo Shi yyx
********************Wo Shi yyx********************
0000000000000000000000000000000000000000Wo Shi yyx
(3)字符串搜索
- s.find(substr,[start,[end]])? ? ? ? ? ? 返回s中出现substr的第一个字符的编号,start和end作用就相当于范围
- s.count(substr,[start,[end]])? ? ? ? ?计算substr在s中出现的次数
- s.startswith(prefix[,start[,end]])? ?是否以prefix开始,是返回True,否返回False
- s.endswith(prefix[,start[,end]])? ? ?是否以prefix结尾,是返回True,否返回False
s = "Wo Shi yyx"
print(s.find('o'))
print(s.count('o'))
print(s.startswith('W'))
print(s.endswith('W'))
-------------------------
1
1
True
False
(4)字符串替换
- s.replace(oldstr,newstr,[count])把s中的oldstr替换为newstr,count为替换次数
s = "Wo Shi oyyx"
print(s.replace('o','a',1))
---------------------------------
Wa Shi oyyx
(5)字符穿的拆分与组合
- s.split([sep,[maxsplit]])以sep为分隔符,把字符串s拆成一个列表,maxsplit表示拆分次数,默认为-1意思为无限次拆分
- s.join(seq)把seq代表的序列组合成字符串,用s将序列各元素连接起来。(这个我也没太理解,我上俩段代码,好好看看)
a = 'asdasdasd'
print(a.split('a'))
s = 'yyx'
a = '123'
print(s.join(a))
print(a.join(s))
--------------------------------
['', 'sd', 'sd', 'sd']
1yyx2yyx3
y123y123x
(6)字符串类型测试
- s.isalnum()? ? ?是否全为字母和数字,并至少有一个字符
- s.isaplha()? ? ? 是否全为字母,并至少有一个字符
- s.isdigit()? ? ? ? 是否全是数字,并至少有一个字符
- s.isspace()? ? ? 是否全为空格,并至少有一个字符
- s.islower()? ? ? s中的字母是否全是小写
- s.isupper()? ? ? s中的字母是否全是大写
- s.istitle()? ? ? ? ?s是否为首字母大写
这一个就不做测试了,这个返回的都是逻辑值。
这些呢,就是本章的全部内容了,下面有一些例题:
(1)将一个字符串中的字符按逆序打印出来
s = input("请输入字符串:\n")
for i in range(0,len(s)):
print(s[len(s) - 1 - i],end='')
请输入字符串:
wo ai ni
in ia ow
(2)从键盘中输入5个字符串,将它们连接成一个字符串后输出
s = ''
for i in range(5):
s5 = input("请输入字符串:\n")
s = s + s5
print(s)
请输入字符串:
hao
请输入字符串:
hao
请输入字符串:
xue
请输入字符串:
python
请输入字符串:
o
haohaoxuepythono
(3)从键盘中输入几个数字,用逗号分隔,求这些数字之和
s = input("请输入几个数字(用逗号分隔):\n")
a = s.split(',')
sum = 0
for i in a:
sum = sum + float(i)
print('sum=',sum)
--------------------------------
请输入几个数字(用逗号分隔):
20,10,20,30
sum= 80.0
|