字符串
1、字符串的定义
字符串是 Python 中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可。
案例1
使用单引号或双引号定义字符串变量
str1 = 'abcdefg'
str2 = "hello world"
print(type(str1)) # <class 'str'>
print(type(str2)) # <class 'str'>
案例2
使用3个引号定义字符串变量
name1 = '''I am Tom, Nice to meet you!'''
print(name1)
print(type(name1))
print('-' * 20)
name2 = """I am Jennify,
Nice to meet you!"""
print(name2)
print(type(name2))
注意:三引号形式的字符串支持换行操作
案例3
思考如何使用字符串定义"I’m Tom"。使用单引号情况:
str1 = 'I'm Tom'
运行结果:

出现以上问题的主要原因在于,以上字符串的定义代码出现了(syntax)语法错误。单引号在字符串定义中必须成对出现,而且Python解析器在解析代码时,会自动认为第一个单引号和最近的一个单引号是一对!
如果一定要在单引号中在放入一个单引号,必须使用反斜杠\进行转义。
str1 = 'I\'am Tom'
使用双引号情况:
str2 = "I'm Tom"
注意:在Python中,如果存在多个引号,建议
- 单引号放在双引号中
- 双引号放在单引号中。
2、字符串输入
在Python代码中,我们可以使用input()方法来接收用户的输入信息。记住:在Python中,input()方法返回的结果是一个字符串类型的数据。
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')
print(name, age, address)
3、字符串的输出
☆ 普通输出
print(变量名称)
print(变量名称1, 变量名称2, 变量名称3)
☆ 格式化输出
- 百分号(Python2和Python3)
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')
print('我的名字是%s,今年%d岁了,家里住在%s...' % (name, age, address))
- format方法(Python3)
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')
print('我的名字是{},今年{}岁了,家里住在{}...'.format(name, age, address))
- f形式(Python3)
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')
print(f'我的名字是{name},今年{age}岁了,家里住在{address}...')
- 延伸
name = input('请输入您购买商品的名称:')
price = float(input('请输入您购买商品的价格:')) # 18.5
print(f'购买商品名称:{name},商品价格:{price:.2f}')
4、字符串在计算机底层的存储形式
在计算机中,Python中的字符串属于序列结构。所以其底层存储占用一段连续的内存空间。
str1 = 'yogeek'
结构原理图

注意:索引下标从0开始。
5、聊聊索引下标
索引下标,就是编号。比如火车座位号,按照座位号快速找到对应的座位。同理,下标的作用即是通过下标快速找到对应的数据。

案例
name = 'abcdef'
print(name[0]) # a
print(name[3]) # d

字符串切片
1、什么是字符串切片
所谓的切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
2、字符串切片基本语法
顾头不顾尾:
序列名称[开始位置下标:结束位置下标:步长]
- 不包含结束位置下标对应的数据, 正负整数均可;
- 步长是选取间隔,正负整数均可,正数从左向右,负数从右向左。默认步长为1。
案例
numstr = '0123456789'
如果想对numstr字符串进行切片,如下图所示:

3、字符串切片小口诀
记口诀:切片其实很简单,只顾头来尾不管,步长为正正向移,步长为负则逆向移
案例1
numstr = '0123456789'
# 1、从2到5开始切片,步长为1
print(numstr[2:5:1])
print(numstr[2:5])
# 2、只有结尾的字符串切片:代表从索引为0开始,截取到结尾字符-1的位置
print(numstr[:5])
# 3、只有开头的字符串切片:代表从起始位置开始,已知截取到字符串的结尾
print(numstr[1:])
# 4、获取或拷贝整个字符串
print(numstr[:])
# 5、调整步阶:类似求偶数
print(numstr[::2])
# 6、把步阶设置为负整数:类似字符串翻转
print(numstr[::-1])
# 7、起始位置与结束位置都是负数(遵循一个原则:必须是从左向右截取)
print(numstr[-4:-1])
# 8、结束字符为负数,如截取012345678
print(numstr[:-1])
案例2

案例3
给定一个图片的名称为"avatar.png",使用Python方法获取这个图片的名称(avatar)以及这个图片的后缀(.png)。
分析:
- 建议先获取点号的位置(目前还未学习,只能一个一个数)
- 从开头切片到点号位置,得到的就是文件的名称
- 从点号开始切片,一直到文件的结尾,则得到的就是文件的后缀
filename = 'avatar.png'
# 获取点号的索引下标
index = 6
# 使用切片截取文件的文件
name = filename[:index]
print(f'上传文件的名称:{name}')
# 使用切片截取文件的后缀
postfix = filename[index:]
print(f'上传文件的后缀:{postfix}')
字符串的操作方法(内置)
1、字符串中的查找方法
所谓字符串查找方法即是查找子串在字符串中的位置或出现的次数。
基本语法
字符串.find(要查找的字符或者子串)
| 编号 | 函数 | 作用 |
|---|---|---|
| 1 | find() | 检测某个子串是否包含在这个字符串中,如果存在,则返回这个子串开始的位置下标,否则则返回-1。 |
| 2 | index() | 检测某个子串是否包含在这个字符串中,如果存在,则返回这个子串开始的位置下标,否则则报异常。 |
| 3 | rfind() | 和find()功能相同,但查找方向为右侧开始。 |
| 4 | rindex() | 和index()功能相同,但查找方向为右侧开始。 |
| 5 | count() | 返回某个子串在字符串中出现的次数 |
☆ find()方法
作用:检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。
# 定义一个字符串
str1 = 'hello world hello linux hello python'
# 查找linux子串是否出现在字符串中
print(str1.find('linux'))
# 在str1中查找不存在的子串
print(str1.find('and'))
案例
使用input方法输入任意一个文件名称,求点号的索引下标
filename = input('请输入您要上传文件的名称:')
# 获取点号的索引下标
index = filename.find('.')
print(index)
# 求文件名称
print(filename[:index])
# 求文件后缀
print(filename[index:])
☆ index()方法
index()方法其功能与find()方法完全一致,唯一的区别在于当要查找的子串没有出现在字符串中时,find()方法返回-1,而index()方法则直接报错。
str1 = 'apple, banana, orange'
# 判断apple是否出现在字符串str1中
print(str1.index('apple'))
print(str1.index('pineapple'))
运行结果:

☆ rfind()与rindex()方法
r -> right,代表从右开始查找
字符串序列.rfind(子串)
字符串序列.rindex(子串)
案例
有一个文件名称叫20210310axvu.avatar.png,其中点号出现了2次,这个时候,如果我想获取文件的后缀.png,代码应该如何编写?
filename = '20210310axvu.avatar.png'
# 求出点号在字符串中第一次出现的位置
# index = filename.find('.')
# print(index)
# 求出点号在字符串中最后一次出现的位置
index = filename.rfind('.')
print(index)
rfind()方法和rindex()方法语法上完全一致,唯一的区别就是对子串没有出现在字符串的中的情况,rfind()返回-1,rindex()返回错误。
☆ count()方法
功能
求子串在字符串中出现的次数
语法
字符串.count('子串', 开始位置下标, 结束位置下标)
案例
获取字符串中and关键字出现的次数
str1 = 'hello world and hello linux and hello python'
# 不限定字符串长度
ands = str1.count('and')
# 限定开始查找的位置和结束位置
# ands = str1.count('and', 10, 30)
print(f'and字符串出现的次数为:{ands}')
2、练习题
问题
使用循环嵌套打印正等腰三角形
*
***
*****
*******
*********
***********
分析
- 每一行的星星数,是有规律的。
1 1 1*2 - 1
2 3 2*2 - 1
3 5 3*2 - 1
4 7 ...
5 9
6 11
*
***
*****
*******
*********
***********
- 每一行星星的前面,都是有空格的
1 5
2 4
3 3
4 2
5 1
6 0
*
***
*****
*******
*********
***********
最终代码
# 初始化计数器
i = 1
# 编写循环条件
while i <= 6:
# 打印空行
print(' ' * (6 - i), end='')
# 初始化计数器
j = 1
# 编写循环条件
while j <= (2 * i - 1):
print('*', end='')
# 更新计数器
j += 1
print('')
# 更新计数器
i += 1
3、字符串的修改方法
所谓修改字符串,指的就是通过函数(方法)的形式修改字符串中的数据。
| 编号 | 函数 | 作用 |
|---|---|---|
| 1 | replace() | 返回替换后的字符串 |
| 2 | split() | 返回切割后的列表序列 |
| 3 | capitalize() | 首字母大写 |
| 4 | title() | 所有单词首字母大写 |
| 5 | upper()与lower() | 返回全部大写或小写的字符串 |
| 6 | lstrip()、rstrip()与strip() | 去除左边、右边以及两边的空白字符 |
| 7 | ljust()、rjust()与center() | 返回原字符串左对齐、右对齐以及居中对齐 |
☆ replace()方法
基本语法
字符串.replace(要替换的内容, 替换后的内容, 替换的次数-可以省略)
案例
编写一个字符串,然后把字符串中的linux替换为python
str1 = 'hello linux and hello linux'
# 把字符串中所有linux字符替换为python
print(str1.replace('linux', 'python'))
# 把字符串中的第一个linux进行替换为python
print(str1.replace('linux', 'python', 1))
# 把and字符串替换为&&
print(str1.replace('and', '&&'))
在开发中,replace主要用于实现关键字替换或过滤功能。例如:北京 ==> BJ。
☆ split()方法
作用
对字符串进行切割操作,返回一个list()列表类型的数据
str1 = 'apple-banana-orange'
print(str1.split('-'))
☆ capitalize() 方法
作用
把字符串的首字母大写,其他字符全部小写
☆ title()方法
作用
把字符串中的所有单词的首字母大写,组成大驼峰
str1 = 'myName'
# 把str1变成首字母大写字符串
print(str1.capitalize())
str2 = 'student_manager'
# 把str2变成大驼峰
print(str2.title().replace('_', ''))
☆ upper()与lower() 方法
upper(),把字符串全部转换为大写形式lower(),把字符串全部转换为小写形式
# 用户名以及密码验证案例
username = input('请输入您的账号:')
password = input('请输入您的密码:')
# 把username和password全部转换为大写或小写
print(username.lower())
print(password.upper())
☆ strip()、lstrip()与rstrip()
strip(),删除字符串两边的空白字符(如空格)lstrip(),只删除字符串左边的空白字符rstrip(),只删除字符串右边的空白字符
# 用户名验证案例
username = input('请输入您的账号:')
# 去除username两边的空白字符
print(len(username))
print(username.strip())
print(len(username.strip()))
☆ ljust()、rjust()、center()
作用
返回原字符串左对齐、右对齐以及居中对齐
基本语法
字符串序列.ljust(长度, 填充字符)
案例
定义一个字符串,要求返回长度为10个字符,不足的使用.点号进行填充
str1 = 'python'
# 左对齐
print(str1.ljust(10, '.'))
# 右对齐
print(str1.rjust(10, '#'))
# 居中对齐
print(str1.center(10, '@'))
4、字符串的判断方法
所谓判断即是判断真假,返回的结果是布尔型数据类型:True 或 False。
| 编号 | 函数 | 作用 |
|---|---|---|
| 1 | startswith() | 检查字符串是否是以指定子串开头,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。 |
| 2 | endswith() | 检查字符串是否是以指定子串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。 |
| 3 | isalpha() | 如果字符串所有字符(至少有一个字符)都是字母则返回 True, 否则返回 False。 |
| 4 | isdigit() | 如果字符串只包含数字则返回 True 否则返回 False。 |
| 5 | isalnum() | Python isalnum() 方法检测字符串是否由字母和数字组成。如果字符串所有字符(至少有一个字符)都是字母或数字则返 回 True,否则返回 False。 |
| 6 | isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False |
☆ startswith()
作用:检查字符串是否是以指定子串开头,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。
str1 = 'python program'
print(str1.startswith('python'))
☆ endswith()
作用:检查字符串是否是以指定子串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。
str2 = 'avatar.png'
print(str2.endswith('.png'))
if str2.endswith('.png') or str2.endswith('.jpg') or str2.endswith('.gif'):
print('是一张图片格式的图片')
else:
print('您上传的文件格式异常')
☆ isalpha()
作用:如果字符串所有字符(至少有一个字符)都是字母则返回 True, 否则返回 False。
str1 = 'admin'
str2 = 'admin123'
print(str1.isalpha()) # True
print(str2.isalpha()) # False
☆ isdigit()
作用:如果字符串只包含数字则返回 True 否则返回 False。
password = input('请输入您的银行卡密码:')
if len(password) == 6 and password.isdigit():
print('输入密码成功,正在验证...')
else:
print('密码输入错误,请重新输入')
☆ isalnum()
作用:Python isalnum() 方法检测字符串是否由字母和数字组成。如果字符串所有字符(至少有一个字符)都是字母或数字则返 回 True,否则返回 False。
username = input('请输入的您的用户名(只能为字母+数字形式):')
if username.isalnum():
print('合理的用户名,正在录入系统...')
else:
print('输入的用户名有误,请重新输入...')
☆ isspace()
作用:如果字符串中只包含空白,则返回 True,否则返回 False(逆向思维)
str1 = ' ' # 最少要包含一个空白字符
print(str1.isspace())
username = input('请输入的您的用户名:')
if len(username) == 0 or username.isspace():
print('您没有输入任何字符...')
else:
print(f'您的输入的字符{username}')
5、字符串操作补充
split()方法
作用
根据指定字符对字符串进行分割操作,其返回一个列表
fruit = 'apple-banana-orange'
print(fruit.split('-'))
join()方法
作用
和split()方法正好相反,join()主要功能是把序列拼接为字符串
字符串.join(数据序列)
案例
把水果列表[‘apple’, ‘banana’, ‘orange’]拼接成’apple-banana-orange’
list1 = ['apple', 'banana', 'orange']
print('-'.join(list1))
1022

被折叠的 条评论
为什么被折叠?



