1.字符串创建
- 字符串就是由若干个不同的unicode字符组成的不可变序列
str1 = '对酒当歌,人生几何。'
str2 = str([10,20,30])
str3 = str()
str4 = "记忆是一种相遇,遗忘是一种自由"
str5 = '''
好雨知时节
当春乃发生
'''
str6 = """
随访潜入夜
润物细无声
"""
2.获取字符串
- 字符串是不可变序列,所以不能修改单个字符;凡是修改字符串的操作都产生新串
str4 = "记忆是一种相遇,遗忘是一种自由"
print(str4[0],str4[-1])
3.原生字符
- 字符串转义参考博客《Python数据类型与运算2》
- 在python没有字符的概念,即使只有一个字符也叫字符串
path = r"C:\course\hixun\1"
print(path)
4.字符串常用操作
4.1 拼接字符串
str1 = '四月' "是你的谎言"
print(str1)
str1 = '四月'
str2 = '是你的谎言'
print(str1 + str2)
4.2 字符串重复
str1 = "汪汪"
print(str1 * 3)
4.3 成员操作
str1 = "可能我撞了南墙才会回头把!"
if "南墙" in str1:
print("该字符串存在")
4.4 计算字符串长度
- 在Python中,数字,英文,小数点,下划线和空格各占一个字节;
- 一个汉字在GBK/GB2312编码占两个字节,在UTF-8/Unicode中一般占3个字节(或者4个字节)
- 通过len()函数计算字符串长度,不分区英文数字和汉字,所有的字符都认为1个
str1 = "啊1"
print(len(str1))
print(len(str1.encode('utf-8')))
print(len(str1.encode('gbk')))
4.5 字符串截取(切片)
- 语法:string[start:end:step]
- 字符串切片操作与列表元组一样,不在左过多实验,详细请看博客《Python列表和元组1》
str4 = "记忆是一种相遇,遗忘是一种自由"
print(str4[:5:2])
5.字符串常用函数
5.1 字符串查找和替换
方法名 | 说明 |
---|
str.count(sub[,start[,end]]) | 查找字符串sub出现的次数;start从指定下标开始查;end结束下标默认字符串长度 |
str.find(sub[,start[,end]]) | 从左向右检查字符串中是否包含字符串sub,如果包含返回下标,否则返回-1。start和end可选参数,指定查找范围 |
str.rfind(sub[,start[,end]]) | 从右开始检查字符串中是否包含字符串sub,如果包含返回下标,否则返回-1。start和end可选参数,指定查找范围 |
str.index(sub[,start[,end]]) | 方法同find()方法类似,如使用index()方法,当指定的字符串不存在时会抛出异常 |
str.rindex(sub[,start[,end]]) | 方法与index()方法类似,从右向左查找 |
str.replace(old,new[,count]) | 返回一个新字符串,原串中old被替换为new,可选参数count指定替换次数 |
str = "你你我我我他他他他"
print(str.count("你"))
str1 = "记忆是一种相遇,遗忘是一种自由,忆"
print(str1.find("忆"))
print(str1.rfind("忆"))
print(str1.find("渣"))
str2 = "人生苦短,Python是岸"
str3 = "a e b"
res = str3.replace("a","b")
print(str3)
print(res)
5.2 分割字符串
- Python中,可以使用split()方法实现字符串分隔,把字符串分隔为列表
str1 = 'a fox jumped over the fence'
res1 = str1.split()
res2 = str1.split(" ",2)
print(res1)
print(res2)
5.3 .join()函数
list1 = ["四月的","风",",八月的",'雨。']
list2 = ("四月的","风",",八月的",'雨。')
res1 = ''.join(list1)
res2 = ''.join(list2)
print(res1)
print(res2)
5.4 字符串判断
方法 | 说明 |
---|
str.isalpha() | 判断字符串是否字母构成并且只包含字母,是返回True,否返回False |
str.isalnum() | 检测字符串是否由字母和数字组成,如果都是数字或字母返回True,否则返回False |
str.isdigit() | 检测字符串是否由数字构成,可检测byte类型 |
str.isdecimal() | 检测字符串是否由数字构成 |
str.isnumeric() | 检测字符串是否由数字构成,可以检测汉字数字:十 |
str.isspace() | 检测字符串是否只有空格或tab构成 |
str.islower() | 检测字符串中的字母是否全部都是小写字母组成 |
str.isupper() | 检测字符串中的字母是否都是由大写字母组成 |
str.startswith(suffix[, start[, end]]) | 用于判断字符串是否以指定字符串开头,如果是返回True,否则返回False |
str.endswith(suffix[, start[, end]]) | 用于判断字符串是否指定字符串结尾,如果是则返回True,否则返回False |
Str = "你好nnn"
print(Str.isalpha())
Str = "你好nnn221"
print(Str.isalnum())
Str = "yxy@ytrx.com.cn"
print(Str.startswith("y"))
print(Str.endswith("n"))
5.5 字符串转换
方法 | 说明 |
---|
str.lower() | 字符串转小写 |
str.upper() | 字符串转大写 |
str.swapcase() | 把字符串中的大小写字母互换,大写转换成小写,小写转换成大写。不去管非字母类字符。 |
str.capitalize() | 将字符串中的第一个字符转为大写,其余转为小写 |
str.title() | 字符串中每个单词的首字母大写,其余小写 |
str.strip([chars]) | 去除字符串两边指定的字符,默认是去除空格 |
str.lstrip([chars]) | 去除字符串左边指定的字符,默认是去除空格 |
str.rstrip([chars]) | 去除字符串右边指定字符,默认是去除空格 |
print("i am".upper())
print("I am".lower())
print("aa1233aa".strip("aa"))
print(" ddfsdf ".strip())
print(" ddfsdf ".rstrip())
5.6 其他方法
print(ord('中'))
- chr()输入一个unicode码,返回一个对应的字符
print(chr(20013))
6.字符串格式化
6.1 用%号格式化
print('大家好我叫%3s,我今年%d,我有%08.2f棒棒糖'%('王尼玛',24,12.3433)
6.2 用forma格式化
: | <填充> | <对齐> | 宽度 | , | <.精度> | <类别> |
---|
| 用于填充的单个字符 | < 左对齐;> 右对其;^ 居中对齐 | 槽的设定输出宽度 | 数字的千位分割符,适用于整数和浮点数 | 浮点数小数部分的精度或字符串的最大输出长度 | 整数类型B,c,d,o,x,X浮点数类型e,E,f,% |
import math
import math
print("以货币形式显示: ¥{:.2f}元".format(1251+3950))
print("{0:.1f}用科学计数法显示:{0:E}".format(12000.1))
print("π取5为小数: {:.5f}".format(math.pi))
print("{0:d}的十六进制是: {0:#x}".format(100))
print("天才是由{:.0%}的灵感,加上{:.0%}的汗水".format(0.01,0.99))
'''
输出:
以货币形式显示: ¥5201.00元
12000.1用科学计数法显示:1.200010E+04
π取5为小数: 3.14159
100的十六进制是: 0x64
天才是由1%的灵感,加上99%的汗水
'''
7.字节
在Python3中最重要的特性是对文本和二进制数据做了更清晰的区分,文本总是Unicode,由字符类型表示,而二进制数据由byte类型表示,Python3不会以任意隐藏方式昏庸字节类型和字符型,也因此在Python3中不能拼接字符串和字节包(Python2中可以,会自动进行转换),也不能在字节保重搜索字节串,也不能将字符串传入参数为字节包的函数
Bytes对象是由单个字节作为基本元素(8位,取值范围0-255)组成的序列,为不可边对象。Bytes对象只负责二进制字节序列的形式记录所需记录的对象,至于对象到底表示什么(比如到底是什么字符)则有相应的编码格式解码决定。Python3中,bytes常用于网络数据传输,二进制图片,和文件的保存等。可以通过调用Bytes实例,其形式为b’xxxx’,其中的’xxxx’为一至多个转义的十六进制字符串(单个x的形式为:\x12,其中\x为表写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码生成bytes对象,就会形成不同的值
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b4bc02322928e4943d370bd5a604c187.png)
7.1 创建字节
b = b'Hello,world'
print(type(b))
7.2 字符串和字节的转换
password = "123"
res = password.encode("utf8")
print(res,type(res))
res = hashlib.sha1(res).hexdigest()
print(res)
b2 = b"hello"
res = b2.decode("utf8")
print(res,type(res))
8.作业
8.1 输入一个字符串,统计该字符串有多少个字符,不许使用len()函数
Str = input("请输入:")
j = 0
for i in Str:
j += 1
print("共有{:d}字节".format(j))
8.2 任何一个字符串,请验证是否是手机号,手机号为11位数字,开头三位必须是130,151,186
- 使用列表存储130,151,186;使用in判断
- 使用切片左取3位
Str = input("请输入判定是否为手机号:")
List = [130,151,186]
if len(Str) == 11:
if int(Str[:3]) in List:
print("是手机号")
else:
print("输入的不是手机号")
else:
print("输入的不是手机号")
8.3 input函数每次只能输入一个字符串,请实现如下输入格式:1,20,30.然后将字符串字符进行分割,得到:3个整数,然后赋值给三个变量。
Str = input("请输入:")
a,b,c = Str.split(",")
a = int(a)
b = int(b)
c = int(c)
print("a",a)
print("b",b)
print("c",c)