什么是字符串,字符串的格式
多个字符就是字符串.
格式:变量名='字符串' 或者:变量名="字符串"
# 例如:
name='张三'
des='张三是个万能的名字'
password='123456'
# ... ...都需要用字符串来存储
详见里面的格式化输出
字符串的下标索引
下标==索引
字符串: | 我 | 喜 | 欢 | 你 |
下标索引: | 0 | 1 | 2 | 3 |
str='我喜欢你'
print(str[0]) # 根据下标将字符取出:我
print(str[3]) # 你
print(str[-1]) # 加负号指从后往前,也就是倒数第一个:你
print(str[-2]) # 欢
字符串的切片
切片的语法:[起始:结束:步长]
切片的取值区间为左闭右开
步长如果为负数,则从后往前取值,若只填写步长且步长为负,则将字符串逆置
# 注意下标从0开始
str='三国水浒红楼西游'
print(str[0]+str[1]) # 下标拼接取出;输出:三国
# 切片取值区间为左闭右开;切片不写步长的时候默认步长为1;
print(str[2:4]) # 输出:水浒
print(str[0:10]) # 如果切多,不报错.也没有输出结果
print(str[2:5:2]) # 每2步取一个值.输出:水红
# 反转:步长如果为负数,结果为从后往前取值,若只填写步长且步长为负1,则将字符串逆置
print(str[::-1]) # 只填写步长且步长为负1,将字符串逆置.输出:游西楼红浒水国三
print(str[::-2]) # 输出:游楼浒国
print(str[5:3:-2]) # 反转后,取值范围也要换过来写,否则结果为空.输出:楼
字符串常见方法
find查找
find从左侧查找字符\字符串是否存在
调用:变量.find('字符\字符串')
rfind:从右侧查找字符
rfindex:从右侧查找字符串
a='123456789'
print(a.find('789')) # 输出:6.返回的数据类型是int类型,结果是所查内容第一个字符7的下标
print(a.find('-5')) # 输出结果为-1.-1代表没有查询到
str = '德华润发成龙国荣星驰'
name = input('输入你喜欢的明星:\n')
if str.find(name) != -1: # 索引不等于-1,存在
print('找到了')
else:
print('没找到')
index查找
index和find一样,区别是index找不到会报错.
如果找到,返回第一个字符的索引;否则报错
count查找个数
检测要查字符\字符串在字符串中出现的次数
s='aaaaaabbbbbbccccc'
print(s.count('a'),s.count('b')) # 输出:6 6
print(s.count('d')) # 如果没找到,输出:0
replace替换
把mystr中的str1替换成str2,如果count指定,则替换不超过count次
语法:mystr.replace (str1,str2,count)
替换完并没有修改原来的字符串,而是得到一个新的字符串,返回值仍然为str类型
a = '999999999' # 9个9
b = a.replace('9', '1', 1) # 除了修改次数,需要替换的两个内容都要是str格式
c = a.replace('9', '1') # 不指定修改次数,就会全部修改
print(b, c) # 输出:199999999 111111111
# 连续替换
str = '我 中 意 你 , 但 是 我 喜 欢 周 润 发。'
newStr = str.replace(' ', '').replace(',', '。') # 先''空值将空格删掉,然后用.replace继续将','替换成'。'
print(newStr)
split分割
通过符号或者文字进行分割内容,返回值类型是list类型(列表类型)
name.split(",") 全部分隔[中文,中文符号,英文符号]
name.split("hello",1) 分隔第一个
a = '1 2 3 4 5 6 7 8 9'
print(a.split(' ')) # 按照空格将字符分开。输出:['1', '2', '3', '4', '5', '6', '7', '8', '9']
b = '1a2a3a4a5a6a7a8a9'
print(b.split('a', 2)) # 按照'a'将字符分开,并且只分割前两个。输出:['1', '2', '3a4a5a6a7a8a9']
字符串判断开始和结束start_ends
startswith:以xx开头,返回值类型是bool类型
endstswith:以xx结尾,返回值类型是bool类型
a = '123456789'
b = '123456789@xx.com'
print(a.startswith('123')) # a以123开头吗。输出:True
print(b.endswith('abc')) # b以abc结束吗。输出:False
lower
将所有大写字母换成小写
upper
将所有小写字母换成大写
strip
去除左右空格
a = ' 哈 哈 '
print(a.strip()) # 替换左右空格,中间的空格替换不了.输出:哈 哈
print(a.strip().replace(' ', '')) # 我们只需要先将左右空格替换掉,然后再将空格替换为空就可以.输出:哈哈
# 当然直接用replace也可以,此处只是为了演示strip
isalpha\isdigit\isalnum
isalpha:判断是否都是字母/汉字(字母和汉字组合),如果是,返回True,如果不是,返回False
a = 'abc123'
print(a.isalpha()) # a中有数字。输出:False
b = 'abc一二三'
print(b.isalpha()) # b为纯字母汉字。返回:True
isdigit:判断是否都是数字,如果是,返回True,如果不是,返回False
a = '123'
b = 'czxc'
print(a.isdigit()) # 全是数字输出:True
print(b.isdigit()) # 不全是数字输出:False
isalnum:判断是否都是数字汉字字母.如果是返回True,否则返回False
a = 'cxz123张三'
b = '123 das仨'
print(a.isalnum()) # 输出:True
print(b.isalnum()) # 有空格,输出:False
案例:判断年龄,不合法提示
age = input('输入年龄:\n') # 这里如果转换int类型以后isdigit会报错
a = age.isdigit()
if a == True: # 当输入内容为纯数字的时候
int(age) # 转换数字类型
if age <= 0 or age >= 140:
print('不合法')
else:
print('合法')
else:
print('输入数字')
len()>python内置非字符串方法
获取长度
使用方法:len(变量)
a = '123456789'
b = '共产主义万岁,世界人民大团结万岁'
print(len(a)) # 输出:10
print(len(b)) # 输出:16
输入6-8位的密码,要求数字和字符组成
# 先不考虑汉字,下面会讲
pwd = input('请输入6-8位的密码,要求数字和字符组成')
if len(pwd) < 6 or len(pwd) > 18:
print('长度不合法请重新输入')
else:
# isalnum:判断是否是数字和字符
# isdigit:判断是否是数字,不能有字符
# isalpha:判断是否是字符,不能有数字
if pwd.isalnum() and (not pwd.isalpha()) and (not pwd.isdigit()):
print('密码合法')
else:
print('密码不合法')
案例:
案例:输入一段数字和字母汉字组合,判断数字和字母汉字各有多少个
a = '123456ueiqwopsnafkl阿达是的接口'
alphaCount = 0 # 字母汉字的个数
digitCount = 0 # 数字的个数
for i in a: # 遍历a内的字符
if i.isalpha(): # 如果是字母汉字
alphaCount += 1
elif i.isdigit(): # 如果是数字
digitCount += 1
print(alphaCount, digitCount)
截取字符串 str='风驰天下,大运摩托(小时候洗脑的广告)!!!'
要求:
1:取出)之前的内容
2:取出( 之后的内容
3:取出()之间的内容
str = '风驰天下,大运摩托(小时候洗脑的广告)!!!'
# 1:取出)之前的内容
# 思路:先找到)之前的索引值,通过切片的形式切出来
index1 = str.find(')')
str1 = str[0:index1]
print(str1) # 风驰天下,大运摩托(小时候洗脑的广告
# 2:取出( 之后的内容
# 思路:先找到(的索引值,再通过切片的形式切出来
index2 = str.find("(")
str2 = str[index2 + 1:] # 内容为空指全部的值
print(str2) # 小时候洗脑的广告)!!!
# 3:取出()之间的内容
# 思路:先找到(的索引值,再找到)的索引值,取中间的部分
index1 = str.find(')')
index2 = str.find('(')
str3 = str[index2 + 1:index1]
print(str3) # 小时候洗脑的广告
汉字排除
需要用到ascll码
# 查看字符对应的ascll码
ord('字符')
输入6-8位的密码,要求数字和字符组成
# 同样是这个示例
pwd = input('请输入6-8位的密码,要求数字和字符组成')
if len(pwd) < 6 or len(pwd) > 18:
print('长度不合法请重新输入')
else:
# isalnum:判断是否是数字和字符
# isdigit:判断是否是数字,不能有字符
# isalpha:判断是否是字符,不能有数字
if pwd.isalnum() and (not pwd.isalpha()) and (not pwd.isdigit()):
flag = True # 默认合法--设置标志类
for p in pwd:
if not ord(p) <= 122: # ascll码小于122肯定不是汉字,汉字ascll码都在122以上
flag = False
if flag: # 本来应该为flag==True。但是因为flag本身就为bool类型所以可以省略书写
print('密码合法')
else:
print('密码不合法')
else:
print('密码不合法')