PYTHON小白笔记05

153 阅读5分钟

--此系列主要记录一些本人作为一个小白在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)