--此系列主要记录一些本人作为一个小白在python学习上遇到的一些重要知识点和易错点的总结,开坑,希望能够坚持到学有所成。
day05:数据容器03(字符串)
一·定义格式以及特点
核心内容:
# 字符串定义
# 定义空字符串
s1 = ''
s2 = ""
print(s1)
print(s2)
# 定义非空字符串
s3 = 'hello'
s4 = "python"
s5 = """hello
python"""
print(s3)
print(s4)
print(s5)
意义:作为存储多个元素的python类型容器的其中之一
特点:
是否可以混装: 只能够作为字符串的容器
是否有下标索引: 数据是有序存储的(有下标序号)
是否允许重复数据: 允许重复数据存在
是否支持元素修改操作: 不支持修改(增加或删除元素等),所有修改相关的函数均是返回新的字符串
二·字符串的下标索引
核心内容:总体来讲与列表的下标索引没有区别
下标索引: 本质就是每个元素对应的编号,但是需要注意的是有两套索引
正索引: 从前到后,从0开始,依次递增
负索引: 从后到前,从-1开始,依次递减
根据索引找元素: 字符串名[索引下标]
字符串中最大索引: len(字符串)-1
示例:
# 需求1: 定义一个字符串,存储'床前明月光,疑是地上霜'
big_str = '床前明月光,疑是地上霜'
# 需求2: 查找并打印出第一个元素
# 方式1:正索引(建议)
s1 = big_str[0]
print(s1)
# 方式2: 负索引
s1 = big_str[-11]
print(s1)
# 需求3: 查找并打印出第最后一个元素
# 方式1:正索引
print(big_str[10])
# 方式2: 负索引(建议)
print(big_str[-1])
# 注意: 如果访问了不存在的索引就会报错
print(big_str[11])
三·字符串的增删查改
易错点:
因为不支持元素的修改操作,所以并没有增删改操作
查询操作:
核心内容:
注意: 字符串中的每个元素都单独小字符串
根据索引查询指定位置上的元素: 字符串名[索引]
查询字符串中元素的总个数: length = len(字符串名)
查询指定元素出现的次数: count = 字符串名.count(元素)
注意: 查找的元素如果不存在就返回0
查询指定元素的索引位置: index = 字符串名.index(元素)
注意: 如果查找的元素不存在就报错: ValueError: substring not found
示例:
# 定义一个字符串,存储'床前明月光,疑是地上霜'
big_str = '床前明月光,疑是地上霜'
# 根据索引查询指定位置上的元素: 字符串名[索引]
# 需求: 查询第三个字符
print('第三个字符是:', big_str[2])
# 查询字符串中元素的总个数: length = len(字符串名)
# 需求: 查询字符串有多个字符
print(f'"{big_str}"有{len(big_str)}个字符')
# 查询指定元素出现的次数: count = 字符串名.count(元素)
# 需求: 查询月字的出现的次数
print('"月"字的出现的次数是:', big_str.count('月'))
# 注意: 查找的元素如果不存在就返回0
print('"汉"字的出现的次数是:',big_str.count('汉'))
# 查询指定元素的索引位置: index = 字符串名.index(元素)
# 需求: 查询月字的出现的索引位置
print('月字的出现的索引位置是:',big_str.index('月'))
# 注意: 如果查找的元素不存在就报错: ValueError: substring not found
# print(big_str.index('汉'))
四·字符串的常用特殊操作
核心内容:
把原有字符串中指定内容替换成新内容: 新的字符串 = 原有字符串.replace()
把原有字符串中两端空白或指定内容去除: 新的字符串 = 原有字符串.strip()
根据指定分隔符,把原有字符串切割成多个子串放到列表中: 列表存储切割的小字符 = 原有字符串.split(分隔符)
判断是否以某子串开头: 布尔结果 = 字符串名.startswith(子串)
判断是否以某子串结尾: 布尔结果 = 字符串名.endswith(子串)
注意: 以后在字符串中查找索引建议用find,不用index,因为find返回-1,index报错
从左往右找,返回第一个正索引: 索引 = 字符串名.find(子串) 注意:如果不存在就返回-1
从右往左找,返回第一个正索引: 索引 = 字符串名.rfind(子串)
把字符串中所有字母变成大写: 新字符串 = 字符串名.upper()
把字符串中所有字母变成小写: 新字符串 = 字符串名.lower()
示例:
# 需求1: 把"...你TMD哦!!!..."文章字符串中'TMD'替换成'***'
text1 = "...你TMD哦!!!..."
print(text1)
text2 = text1.replace('TMD', '***')
print(text2)
# 需求2: 把" 123456 "密码字符串中两端空白去除:
pwd1 = " 123456 "
print(pwd1)
# 默认去重空白
pwd2 = pwd1.strip()
print(pwd2)
# 也可以手动自定空格字符' '去除空白
pwd3 = pwd1.strip(' ')
print(pwd3)
# 需求3: 把"apple-orange-pear-banana"水果切分开自动放到列表中
fruit1 = "apple-orange-pear-banana"
print(fruit1)
fruit2 = fruit1.split('-')
print(fruit2)
# 定义字符串存储姓名
name = '欧阳AbcD娜娜'
print(name)
# 判断是否以某子串开头: 字符串名.startswith(子串)
print(name.startswith('欧')) # True
# 判断是否以某子串结尾:字符串名.endswith(子串)
print(name.endswith('娜')) # True
# 查找指定元素的索引,如果不存在就返回-1
# 字符串名.find(子串): 从左往右找,返回正索引
print(name.find('娜')) # 6
print(name.index('娜')) # 6
# find和index的功能几乎一样,只是如果访问内容不存在,不会报错,返回-1
print(name.find('国')) # -1
# 字符串名.rfind(子串): 从右往左找,返回正索引
print(name.rfind('娜')) # 7
# 把字符串中所有字母变成大写:字符串名.upper()
print(name.upper()) # 欧阳ABCD娜娜
# 把字符串中所有字母变成小写:字符串名.lower()
print(name.lower()) # 欧阳abcd娜娜
略微少见的方法:
isdecimal: 判断十进制整数,不包含中文数字
isdigit: 判断所有的整数,不包含中文数字
isnumeric: 判断所有的整数,包含中文数字
join: 把容器中每个元素用指定分隔符连接成一个大字符串
五·随机验证码生成
核心内容:
# 定义空字符串用于拼接每次生成的字符
yzm = ''
for i in range(4):
# 随机索引
index = random.randint(0, len(big_str) - 1)
# 根据随机索引找对应字符
yzm += big_str[index]
# 循环外打印最终验证码
print(yzm)