前言
今天和大家分享字符串更深一步的知识,看了之后你一定会爱上的哈哈哈
一、字符串操作
说明:字符串类型中内置了很多方法,方便开发者对字符串进行常见操作。
字符串的常见操作方法有查找、修改和判断三大类。
通过调用内置的函数,可以省去开发者重复造轮子,节省开发时间,提升开发速度。
开发语言的发展总是要语言使用者尽量的将精力集中到业务逻辑的处理上,而不是编写一些重复性的、没啥技术含量的代码。
1.1 查找
- find() :检测某个子串是否包含在这个字符串中,如果在,返回这个子串开始位置的下标索引,否则返回 -1。
- rfind() :和 find() 功能相同,但查找方向为—右侧开始
- 语法格式
字符串序列.find(子串,开始位置下标,结束位置下标)
# 注意: 开始和结束位置下标可以省略,表示在整个字符串序列中查找。
- 举例
str1 = 'hello world'
print(str1.find('hello')) # 结果为 0
print(str1.find('world')) # 结果为 6
print(str1.find('school')) # 结果为 -1
- index() :检测某个子串是否包含在这个字符串中,如果在,返回这个子串开始位置的下标索引,否则报错。
- rindex() :和 index() 功能相同,但查找方向为—右侧开始
- 语法格式
字符串序列.index(子串,开始位置下标,结束位置下标)
- 举例
str1 = 'hello world'
print(str1.index('hello')) # 结果 0
print(str1.index('world')) # 结果 6
print(str1.index('123')) # 结果 报错
- count() :返回某个子串在字符串中出现的次数。
- 语法格式
字符串序列.count(子串,开始位置下标,结束位置下标)
- 举例
str1 = 'hello world'
print(str1.count('l')) # 结果为 3
print(str1.count('o')) # 结果为 2
print(str1.count('c')) # 结果为 0
1.2 修改
- replace() :替换。
- 语法格式
字符串序列.replace(旧子串,新子串,替换次数)
# 注意: 如果第三个参数省略,默认替换该子串出现的全部次数
- 举例
str1 = 'hello world'
print(str1.replace('h','A')) # 结果为 Aello world
print(str1.replace('l','c')) # 结果为 hecco worcdld
print(str1.replace('o','B',1)) # 结果为 hellB world
print(str1) # 结果为 hello world
# 注意: 数据类型分为 可变类型 和 不可变类型 两种,字符串属于不可变类型,所以它的数据修改时不能改变原有字符串
- split() : 按照指定字符分割字符串。
- 语法格式
字符串序列.split(分割字符,分割次数)
- 举例
str1 = 'hello world'
print(str1.split('l')) # 结果为 ['he', '', 'o wor', 'd']
print(str1.split('l',2)) # 结果为 ['he', '', 'o world']
print(str1.split('o')) # 结果为 ['hell', ' w', 'rld']
- join() :用一个字符或子串合并字符串。
- 语法格式
字符串序列.join(多字符串组成的序列)
- 举例
str1 = ('小明','小红','小王','小李')
print('—'.join(str1)) # 结果为 小明—小红—小王—小李
print('...'.join(str1)) # 结果为 小明...小红...小王...小李
print('//'.join(str1)) # 结果为 小明//小红//小王//小李
- capitalize() : 将字符串第一个字符转换成大写。
- 语法格式
字符串序列.capitalize()
- 举例
str1 = 'hello world'
print(str1.capitalize()) # 结果为 Hello world
- title() : 将字符串每个单词首字母转换成大写。
- 举例
str1 = 'hello world'
print(str1.title()) # 结果为 Hello World
- lower():将字符串中大写转小写。
- 举例
str1 = 'HEllo WOrld'
print(str1.lower()) # 结果为 hello world
- upper(): 将字符串中小写转大写。
- 举例
str1 = 'hello world'
print(str1.upper()) # 结果为 HELLO WORLD
- lstrip():删除字符串左侧空白字符。
- 举例
str1 = ' hello world'
print(str1.lstrip()) # 结果为 hello world
- rstrip():删除字符串右侧空白字符。
- 举例
str1 = ' hello world '
print(str1.rstrip()) # 结果为 hello world
- strip():删除字符串两侧空白字符。
- 举例
str1 = ' hello world '
print(str1.strip()) # 结果为 hello world
- ljust():返回原字符串左对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。
- rjust():返回原字符串右对齐,并使用指定字符(默认空格)填充至对应长度的新字符串。语法和ljust相同。
- 语法格式
字符串序列.ljust(长度,填充字符)
- 举例
str1 = 'hello'
print(str1.ljust(10,'.')) # 结果为 hello.....
print(str1.ljust(10,'*')) # 结果为 hello*****
print(str1.rjust(10,'@')) # 结果为 @@@@@hello
- center():返回原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度的新字符串,语法和ljust相同。
- 举例
str1 = 'hello'
print(str1.center(10,'.')) # 结果为 ..hello...
1.3 判断
- startswith():检查字符串是否以指定子串开头,如果是返回 True,否则返回 False,如果设置开始和结束位置下标,则在指定范围内检查。
- 语法格式
字符串序列.startswith(子串,开始位置下标,结束位置下标)
- 举例
str1 = 'hello world'
print(str1.startswith('h')) # 结果为 True
print(str1.startswith('h',5,10)) # 结果为 False
- endswith():检查字符串是否以指定子串结尾,如果是返回 True,否则返回 False,如果设置开始和结束位置下标,则在指定范围内检查。
- 语法格式
字符串序列.endswith(子串,开始位置下标,结束位置下标)
- 举例
str1 = 'hello world'
print(str1.endswith('d')) # 结果为 True
print(str1.endswith('d',2,5)) # 结果为 False
- isalpha(): 如果字符串所有字符都是字母返回 True,否则返回 False。
- 举例
str1 = 'hello'
print(str1.isalpha()) # 结果为 True
str2 = 'hello123'
print(str2.isalpha()) # 结果为 False
- isdigit():如果字符串所有字符都是数字返回 True,否则返回 False。
- 举例
str1 = '132456'
print(str1.isdigit()) # 结果为 True
str2 = 'hello123'
print(str2.isdigit()) # 结果为 False
- isalnum():如果字符串中包含字母或数字返回 True,否则返回 False。
- 举例
str1 = 'hello123'
print(str1.isalnum()) # 结果为 True
str2 = '132-'
print(str2.isalnum()) # 结果为 False
- isspace():如果字符串只包含空白返回 True,否则返回 False。
- 举例
str1 = ' '
print(str1.isspace()) # 结果为 True
str2 = 'hello world'
print(str2.isspace()) # 结果为 False
二、字符串案例分析
2.1 基础练习
- string = “Python is good”, 请将字符串里的Python替换成 python,并输出替换后的结果
string = 'Python is good'
# # 方法一
print(string.replace('Python','python')) # replace() 将指定字符串替换成新的字符串
# 运行结果:
python is good
# # 方法二
print(string.lower()) # lower() 将字符串中大写转小写
# 运行结果:
python is good
- 有一个字符串 string = “python从入门到放弃.html”,请写程序从这个字符串里获得.html前面的部分
string = "python从入门到放弃.html"
# 方法一
# find(): 检测某个字符是否包含在这个字符串中,如果包含返回这个字符的下标,否则返回 -1
index = string.find('.')
print(string[:index])
# 运行结果:
python从入门到放弃
# 方法二
for item in string:
print(item,end='') # end 方法取消换行
if item == '弃':
break
# 运行结果:
python从入门到放弃
- “this is a book”,请将字符串里的book替换成apple
string = "this is a book"
# replace() 将指定字符串替换成新的字符串
print(string.replace('book','apple'))
# 运行结果:
this is a apple
- “this is a book”, 请用程序判断该字符串是否以this开头
string = "this is a book"
# # 方法一
print(string.startswith('this')) # startswith() 判断字符串是否以指定字符开头,是返回 True,否则返回 False
# 运行结果:
True
# # 方法二
if string[:4] == 'this':
print(True)
else:
print(False)
# 运行结果:
True
- “this is a book”, 请用程序判断该字符串是否以apple结尾
string = "this is a book"
# 方法一
print(string.endswith('apple')) # endswith() 检查字符串中是否以指定字符结尾,是返回 True,否则返回 False
# 运行结果:
False
# 方法二
if string[-1:-6:-1] == 'elppa':
print(True)
else:
print(False)
# 运行结果:
False
2.2 提升练习
- 用户输入密码时,可能存在许多的误输入,按照如下要求对密码进行检查
- 删除密码首位的空格(因为有可能在开始和结尾的位置不小心键入空格)
- 将所有的字母都转换为小写(用户也有可能不小心将小写写成大写)
- 如果输入的密码都是空格,没有实际输入内容,则提示“请输入有效的密码”
password = input('请输入密码:')
if password.isspace(): # isspace() 如果字符串中只包含空白,则返回True,否则返回False
print('请输入有效的密码')
else:
print(password.strip().lower())
# strip() 用于移除字符串头尾指定的字符,默认为空格或换行符或字符序列
# lower() 把字符串中的大写字符转换成小写
# 运行结果:
请输入密码:
请输入有效的密码
请输入密码: A16546
a16546
- 用户输入一个整数金额,将其按照如下格式进行转换
- 如果金额位数小于等于3位,则原样输出,如 566
- 如果金额位数大于3位,则按照如下样式输出,如 566,1、566,123,445、566,123,445,23
"""
思路:
1. 使用 find() 方法判断输入的金额是整数还是小数
2. 如果是小数,分别截取整数部分和小数部分
3. 针对整数部分取余,根据余数截取整数部分,剩下的部分(int_number[num:])正好能被3整除
4. 针对能整除的部分通过循环格式化金额
5. 拼接金额: str + result + 小数部分
"""
Number = input('请输入一个整数金额:')
# 如果输入的是小数,先截取整数部分
index = Number.find('.') # 获取小数点的下标
# 如果 index=-1,说明输入的是整数,否则说明输入的是小数
if index == -1:
int_number = Number
else:
int_number = Number[:index] # 获取整数部分
float_number = Number[index:] # 获取小数部分
"""
判断整数部分的长度
1. 如果能被3整数,则不做处理
2. 若不能,则求取余数,根据余数截取字符
"""
num = len(int_number) % 3
# 截取字符串
str1 = int_number[:num]
result = ''
i = 1
# 对整数部分进行格式化
for item in int_number[num:]:
if i % 3 == 0:
result = result + item + ','
else:
result += item
i += 1
# rstrip() 删除右侧指定字符,再与小数部分进行拼接
if index == -1:
print((str1 + ',' + result.rstrip(',')).lstrip(','))
else:
print((str1 + ',' + result.rstrip(',') + float_number).lstrip(','))
# 运行结果:
请输入一个整数金额:1654564565
1,654,564,565
请输入一个整数金额:15615641.1654561
15,615,641.1654561
- 注册账号时,对密码的格式是有一定要求的,比如我们的要求是
- 密码的第一个字符必须是字母,且必须大写
- 密码的长度必须在6-12位之间
- 密码必须包含字母、数字和特殊符号 $ 、_ 之中的一个
- 请利用现有知识解决上面的问题,不要使用正则
while True:
password = input('输入密码:')
"""
遍历字符串,对每一个字符进行判断,判断每一个字符的类型
"""
isAlpha = False # 声明变量表示字符串中是否包含字母,默认值为False
isDigit = False # 声明变量表示字符串中是否包含数字,默认值为False
for item in password:
if item.isdigit(): # isdigit() 表示如果字符串只包含数字返回 True,否则返回 False
isDigit = True
if item.isalpha(): # isalpha() 表示如果字符串中只包含字母返回 True,否则返回 False
isAlpha = True
# isalpha() 表示如果字符串中至少有一个字符或者所有字符都是字母则返回 True,否则 False
# upper() 表示将字符串中的小写转换成大写
if password[0].isalpha() and password[0].upper() == password[0] and 6 <= len(password) <= 12 and isAlpha and isDigit and (password.find('$') != -1 or password.find('_') != -1):
print('密码格式正确')
else:
print('密码格式不正确')
# 运行结果:
输入密码:a16465
密码格式不正确
输入密码:A123465
密码格式不正确
输入密码:A16$
密码格式不正确
输入密码:A1654321$
密码格式正确
输入密码:A165161_
密码格式正确
- 让用户输入一个文件名称,文件名称必须包含扩展名,如 1.jpg、aa.txt、music.mp4等
- 判断用户输入的文件名称是否是一个图片
- 图片的扩展名可以是 .jpg、.png、.gif
Img = input('输入一个文件名称:').lower() # lower() 将字符串转化为小写
# endswith() 判断字符串中是否以指定字符结尾
if Img.endswith('.jpg') or Img.endswith('.png') or Img.endswith('.gif'):
print('文件是一个图片')
else:
print('文件不是图片')
# 运行结果:
输入一个文件名称:1651.html
文件不是图片
输入一个文件名称:16554.jpg.html
文件不是图片
输入一个文件名称:165156.JPG
文件是一个图片
输入一个文件名称:1651.gif
文件是一个图片
- 每月末要统计公司员工的出勤情况,人事娟娟采用如下的方式记录每位员工的出勤
- A 代表缺勤、L 代表迟到、P 代表正常。一个 A 代表缺勤1次,一个 L 代表迟到1次,一个 P 代表正常1次。
- 比如如下的考勤记录 PPPPPPPPPPALPALPPPPPPL 代表 正常出勤 16次,缺勤2次,迟到3次
- 一个月内,缺勤一次以内,并且迟到3次以内,是不扣钱的,可以发全额工资,否则就要扣钱
- 现有员工小张的出勤记录如下 PPAPPPLPPPPPLPPPPPPAPPPP,编程计算小张本月是否扣钱
Str = 'PPAPPPLPPPPPLPPPPPPAPPPP'
A = Str.count('A') # 缺勤次数
L = Str.count('L') # 迟到次数
if A > 1 or L > 3:
print('小张本月扣钱')
else:
print('不扣钱')
# 运行结果:
小张本月扣钱
总结
感谢您观看本篇文章,感觉博主写的不错的话,小手手点一下赞,博主需要您的鼓励,感谢。