目录
strname. strip(char) 方法 --- 删除字符串左右指定字符
strname.lstrip(char) --- 删除祖父穿左侧指定字符
strname.rstrip(char) --- 删除字符串右侧指定字符
strname.replace( ' 需要替换字符串 ', ' 替换结果 ')
例1 编写程序,检测输入的字符串密码是否是一个合法的密码,规则如下:密码必须至少八个字符,只能包含英文和数字,密码至少包含2个数字
例2 编写程序,实现输入一个二进制数转换为十进制数,如:1001 十进制 9,1 * 2^0+0 * 2^1+0 * 2^2+1 * 2 ^3
例4 统计字符串汇总字母个数,存储到列表b[26],a的个数存储在b[0],b的个数存储在b[1],z的个数存储在b[25]
例6 将2个字符串逆置后交叉合并到新字符串中,如:str1= ‘abcdef ’,str2 = ‘12345678’,str3 = f8e7d6c5b4a321
例7 字符串排序,Python中字符串类不允许直接修改元素,需要将其转换为列表之后进行排序,排完后转回字符串
字符串 --- 由 ' ' 或 " " 包裹起来的任意不可变序列文本序列
- str1 = 'china' # 字符串
- print(str1[0]) # 字符串常量不可变,但支持列表索引的操作
- str2 = ['china', 'hello', 'nihao '] # 二维字符串 或 字符串列表
- str2[0] = 'CHINA'
- print(str2)
-
- 结果:
- c
- ['CHINA', 'hello', 'nihao ']
单双引号使用
- print('几多.范罗苏姆外号“龟叔”')
-
- 结果:
- 几多.范罗苏姆外号“龟叔”
- str1 = "我今晚跑步数为:"
- num = 3200
- print(str1+num) # 报错 ,字符串的拼接只能是字符串
- print(str1+str(num))
-
- 结果:
- 我今晚跑步数为:3200
注意:
字符串的拼接只能是字符串,其他类型会发生报错。
字符串长度多余一行时,可以使用三引号将字符串包夹
- str1 = '''china
- china china
- china china china '''
- print(str1)
-
- 结果:
- china
- china china
- china china china
原则 --- 字符串属于不可变序列,可以通过切片来实现字符串的截取
格式 --- strname[ start, end, step]
start --- 从0索引开始
end --- 最后一个字符的索引
step --- 切片长度,默认为1
- str1 = '2022,加油,中国'
- print(str1)
- print(str1[0])
- print(str1[0:])
- print(str1[5:])
- print(str1[:3])
- print(str1[2:6])
- print(str1[1:10:2])
- print(str1[-1:-3:-1])
-
- 结果:
- 2022,加油,中国
- 2
- 2022,加油,中国
- 加油,中国
- 202
- 22,加
- 02加,国
- 国中
- # 例1 输入员工省份证号,输出出生日期
- str1 = input('请输入员工的身份证号:')
- if len(str1) == 18:
- print("该员工出生日期为:", str1[6:10], "年", str1[10:12], "月", str1[12:14], "日")
- if int(str1[-2]) % 2 == 0:
- print("该员工为:女性")
- else:
- print('该员工为:男性')
- else:
- print("您输入的身份证号错误")
-
- 结果:
- 请输入员工的省份证号:610628199908270330
- 该员工出生日期为: 1999 年 08 月 27 日
- 该员工为:男性
分隔 --- 将字符串分隔为列表
格式 --- strname.split( sep,maxsplit )
sep --- 指定分隔符,可以包含多种符号(空格, \n, \t 等),默认为None
maxsplit --- 指定分隔次数
- str1 = 'python 软件官网 >>> https://www.python.org.'
- print("原串码:", str1)
- list1 = str1.split() # 省略分隔符sep
- list2 = str1.split('>>>')
- list3 = str1.split('.')
- list4 = str1.split(" ", 3)
-
- print(list1)
- print(list2)
- print(list3)
- print(list4)
-
- 结果:
- 原串码: python 软件官网 >>> https://www.python.org.
- ['python', '软件官网', '>>>', 'https://www.python.org.']
- ['python 软件官网 ', ' https://www.python.org.']
- ['python 软件官网 >>> https://www', 'python', 'org', '']
- ['python', '软件官网', '>>>', 'https://www.python.org.']
合并 --- 将多个字符串采用固定的分隔符进行连接
格式 --- strnew = string.join(iterable)
strnew --- 新字符串名称
string --- 合并时的分隔符
jion --- 方法
iterable --- 被合并的字符串 --- 迭代对象
作用 --- 检索字符串在另一串中出现的次数,若不存在返回 0
格式 --- strname.count(substring)
substring --- 要检索的字符串
- str1 = '***ABV***def***'
- cn1 = str1.count("*")
- cn2 = str1.count("?")
- print("*号次数:", cn1, "?号次数", cn2)
-
- 结果:
- *号次数: 9 ?号次数 0
-
- str1 = '***********'
- cn1 = str1.count('*')
- cn2 = str1.count('**')
- print("次数:", cn1, cn2)
-
- 结果:
- 次数: 11 5
作用 --- 检索是否包含指定字符串,若不存在则返回 -1 ,否则返回首次出现的索引值
格式 --- strname.find( sub )
sub --- 子串内容
- str1 = input("输入主串:")
- str2 = input("输入子串:")
- # 方法一
- num = str1.find(str2)
- if num > -1:
- print("存在,第一次出现的索引为:", num, "内容为:", str1[num])
- else:
- print('不存在')
- # 方法二
- print(str2 in str1)
-
- 结果:
- 输入主串:123123123
- 输入子串:5
- 不存在
- None
-
- 输入主串:1235456123
- 输入子串:5
- 存在,第一次出现的索引为: 3 内容为: 5
- True
注意:
find( )一般用于在主串总查找子串是否存在,还可以使用 in 实现
作用 --- 检索字符串是否以指定字符串开头
作用 --- 检索字符串是否以指定字符串结尾
- str1 = input()
- print(str1.lower())
- print(str1.upper())
-
- 结果:
- awdanga414515ADFJWIFOAF
- awdanga414515adfjwifoaf
- AWDANGA414515ADFJWIFOAF
注意:
这两种内置方法只能实现单一转换不能互换
大小写互换 - > strn.swapcase( )
- str1 = input()
- print(str1.swapcase())
-
- 结果:
- asdahSDAHDKAdahsda
- ASDAHsdahdkaDAHSDA
格式 --- strname.isalpha( ) --- 成立返回Ture,不成立返回False
- str1 = input("请输入字符串:")
- cnt = {} # 定义一个空字典
- for i in str1:
- if i.isalpha() == True:
- cnt[i] = cnt.get(i, 0) + 1 # cnt.get(i, 0) 计算i(键)对应的值,找不到返回 0
- print(cnt)
-
- 结果:
- 请输入字符串:dasda1e648qwf4g86
- {'d': 2, 'a': 2, 's': 1, 'e': 1, 'q': 1, 'w': 1, 'f': 1, 'g': 1}
没写char,则默认删除对应位置空白字符( \t \n \r 空格)
- # 例1 统计字符串中单词个数
- str1 = input('请输入一串字符:')
- str1 = str1.strip() # 删除左右空白字符(空格)
- # 方法:判断当前字符不是空格,下一个字符是空格
- cnt = 1
- i = 0
- while i < len(str1) - 1:
- if str1[i] != ' ' and str1[i + 1] == ' ':
- cnt += 1
- i = i + 1
- if str1 == '':
- cnt = 0
- print('单词个数为:', cnt)
-
- 结果:
- 请输入一串字符:aa dwh fqif fqf fwqf hieg fqw
- 单词个数为: 7
- str1 = '***dasd***dgrh***'
- str1 = str1.replace('*', '0')
- print(str1)
-
- 结果:
- 000dasd000dgrh000
- poem = '浮舍', '魈', '疾风之下', '亦有归途', '我于花露之中绽放', "亦如黎明中的花朵"
- for i in poem:
- print('|%s|' % i)
- # 删除左右空白
- # 居中
- for i in poem:
- print('|%s|' % i.strip().center(10))
-
- 结果:
- |浮舍|
- |魈|
- |疾风之下|
- |亦有归途|
- |我于花露之中绽放|
- |亦如黎明中的花朵|
- | 浮舍 |
- | 魈 |
- | 疾风之下 |
- | 亦有归途 |
- | 我于花露之中绽放 |
- | 亦如黎明中的花朵 |
- # 例1 编写程序,检测输入的字符串密码是否是一个合法的密码,规则如下:密码必须至少八个字符,只能包含英文和数字,密码至少包含2个数字
- str1 = input("请输入密码:")
- t = 0
- for i in str1:
- if i.isdigit(): # 计算字符串中数字个数
- t += 1
- if len(str1) >= 8:
- if str1.isalnum(): # 判断字符串是否只包含字母和数字
- if t >= 2:
- print("密码正确")
- else:
- print("密码错误,包含数字少于2个")
- else:
- print("密码错误,只能包含字母和数字")
- else:
- print("密码长度至少为8")
-
- 结果:
- 请输入密码:da6d5f5!
- 密码错误,只能包含字母和数字
-
- 请输入密码:123
- 密码长度至少为8
-
- 请输入密码:161651981
- 密码正确
-
- 请输入密码:adasgegewr
- 密码错误,包含数字少于2个
- # 例2 编写程序,实现输入一个二进制数转换为十进制数,如:1001 十进制 9,1 * 2^0+0 * 2^1+0 * 2^2+1 * 2 ^3
- str1 = input('请输入二进制数:')
- d1 = 0 # 接收转换结果
- t = 0 # 权值
- f = 1
- if str1.isnumeric(): # 判断字符串至少有一个字符且所有字符均为数字
- str2 = str1[::-1] # 将字符串逆置, str2接收逆置的结果
- for i in str2:
- if i == '1' or i == '0':
- d1 = d1 + int(i) * 2 ** t
- else:
- print('无效数字')
- f = 0
- break
- t = t + 1 # 权值+1
- if f == 1:
- print(str1, '转为是十进制整数是:', d1)
- else:
- print('无效数字')
- else:
- print('输入格式错误')
-
- 结果:
- 请输入二进制数:1001
- 1001 转为是十进制整数是: 9
-
- 请输入二进制数:asdag
- 输入格式错误
-
- 请输入二进制数:1984
- 无效数字
- # 例3 国际标准书号共10位:d1d2d3d4d5d6d7d8d9d10,最后一位d10是效验为,效验计算公式(d1 * 1+d2 * 2+d3 * 3+d4 * 4+d5 * 5+d6 * 6+d7 * 7+d8 * 8+d9 * 9)%11,若计算结果为10则使用x表示,编写程序,输入前9个内容,输出标准书号。
- str1 = input('请输入国际标准书号前9位:')
- check = 0
- t = 1
- for i in str1:
- check = check + int(i) * t
- t += 1
- check %= 11
- if check == 10:
- check = 'x'
- print(str1 + str(check))
-
- 结果:
- 请输入国际标准书号前9位:123456789
- 123456789x
- #例4 统计字符串汇总字母个数,存储到列表b[26],a的个数存储在b[0],b的个数存储在b[1],z的个数存储在b[25]
- # 方法一
- 例4 统计字符串汇总字母个数,存储到列表b[26],a的个数存储在b[0],b的个数存储在b[1],z的个数存储在b[25]str1 = input('请输入英文字符串')
- b = [0] * 26 # b 列表全部清零
- str1 = str1.lower() # lower()大写转小写
-
- for i in str1:
- if i.isalpha(): # isalpha()判断是否为字母
- b[ord(i) - 97] += 1 # ord()提取当前字母的ASCII值,当前字母ASCII值减去首字母的ASCII值
- print(b)
-
- # 方法二
- str1 = input('请输入英文字符串')
- b = []
- str1 = str1.lower()
- for i in range(26):
- b.append(str1.count(chr(97+i))) #chr() 转换为字符串
- print(b)
-
- 结果:
- 请输入英文字符串dasdaggtj
- [2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
-
- # 例5 将字符串中大写字母改写为下一个字母,Z字母改为A
- str1 = input('请输入大写英文字符串')
- for i in str1:
- if i >= 'A' and i <= "Y":
- i = chr(ord(i) + 1) # 转换为ACSII值+1后转换为字符串类型
- elif i == 'Z':
- i = 'A'
- print(i, end='')
-
- 结果:
- 请输入大写英文字符串asdhfwuADWHADIFHAF
- asdhfwuBEXIBEJGIBG
上例改为:将大写字母改为上一个,A改为Z
#上例改为:将大写字母改为上一个,A改为Z str1 = input('请输入大写英文字符串') for i in str1: if i >= 'B' and i <= "Z": i = chr(ord(i) - 1) # 转换为ACSII值+1后转换为字符串类型 elif i == 'A': i = 'Z' print(i, end='') 结果: 请输入大写英文字符串dsadABCD dsadZABC
- # 例6 将2个字符串逆置后交叉合并到新字符串中,如:str1= ‘abcdef ’str2 = ‘12345678’,str3 = f8e7d6c5b4a321
- str1 = input('请输入一个字符串:')
- str2 = input('请输入另一个字符串:')
- print(str1, str2, sep='\n')
- str1 = str1[::-1] # 字符串切片逆序
- str2 = str2[::-1]
- str3 = ''
- i = 0
- j = 0
- while i < len(str1) or j < len(str2):
- if i < len(str1):
- str3 += str1[i] # 拼接
- if j < len(str2):
- str3 += str2[j]
- i += 1
- j += 1
- print(str3)
-
- 结果:
- 请输入一个字符串:123456
- 请输入另一个字符串:abcd
- 123456
- abcd
- 6d5c4b3a21
- # 例7 字符串排序,Python中字符串类不允许直接修改元素,需要将其转换为列表之后进行排序,排完后转回字符串
- str1 = '987654321'
- list1 = list(str1)
- list1.sort()
- str1 = ''.join(list1)
- print(str1)
-
- 结果:
- 123456789
-
- # 例8 排除字符串首尾个元素,剩余内容排序
- str1 = input('请输入一个字符串:')
- str2 = str1[1:-1] #或者str1[1:len(str1)-1]
- list1 = list(str2)
- list1.sort()
- str2 = ''.join(list1)
- print(str1[0] + str2 + str1[-1])
-
- 结果:
- 请输入一个字符串:dcab
- dacb
定义 --- 改格式化字符串是指指定一个模板,该模板留出一些空位,在根据需要天上相应的内容
实现 --- 通过操作符 % 实现 --- %[ - ] [ + ] [ 0 ] [ .n ] % exp
参数说明
--- [ ]表示内容可选
--- - 左对齐
--- + 右对齐
--- 0 右对齐,用0填充空白,一般配合参数m使用
--- m 宽度
--- n 小数保留位数
格式化字符 | 作用 | 格式化字符 | 作用 |
---|---|---|---|
%s | 字符串 | %r | 字符串 |
%c | 单个字符 | %o | 八进制 |
%d or %i | 十进制整数 | %e | 指数 |
%x | 十六进制整数 | %E | 指数 |
%f or %F | 浮点数 | %% | 字符串% |
- str1 = '编号:%05d\t公司名称:%s官网:https://www.%s.com.'
- str2 = (1, '百度', 'baidu')
- str3 = (2, '腾讯', 'qq')
- str4 = (3, '字节跳动', 'bytedance')
- print(str1 % str2)
- print(str1 % str3)
- print(str1 % str4)
-
- 结果:
- 编号:00001 公司名称:百度官网:https://www.baidu.com.
- 编号:00002 公司名称:腾讯官网:https://www.qq.com.
- 编号:00003 公司名称:字节跳动官网:https://www.bytedance.com.
Python2.6版本以后推荐使用format( )方法
格式 --- str.format (args)
str --- 字符串显示的样式即模板
args --- 需要转换的对象,若有多项可以使用逗号分隔
占位符 --- { } 和 :
模板格式 --- { index: fill aglin sign # width.percision type}
index --- 索引位置,默认为0开始,省略自动分配
fill --- 空白填充的字符
aglin --- 对齐方式,一般与 width(宽度)配合使用
< --- 左对齐
> --- 右对齐
= --- 内容右对齐,支队数字类型有效,即数字放在填充字符的最右侧
^ --- 内容居中
sign --- 指定有无符号
加号 ---正数
减号 --- 负数
空格 --- 正数加正号,负数加负号
# --- 值为二、八、十六进制时,显示0b、0o、0x的前缀
width --- 宽度
percision --- 保留的小数位数
type --- 类型
ASCII码 --- 对10个数字、52个英文大小写字母、其他字符进行编号最多表示256个字符,每个字符占1B
GBK\GBK2312 --- 中文汉字编码,1B表示英文字母,2B表示汉字
Unicode --- 称为万国码、统一码,用于满足跨语言、跨平台的文件转换处理要求
Unicode --- 包含全球所有国家的字符编码的映射关系,已达到编码的统一使用
Unicode --- 表示字符太浪费空间,为了解决字符的存储和传输问题而产生了UTF编码
UTF --- Unicode Transformation Format --- 只用于存储和传输的时候使用,便于存储和传输时节空间和时间
UTF-8 --- 使用1、2、3、4个字节表示字符,优先使用1B来表示字符,无法满足时增加1B,最多4B,英文占1B,欧洲语系2B,东亚语系3B,其他特殊字符占4B
UTF-16 --- 使用2、4字节表示字符
UTF-32 --- 直接使用4字节
总结 --- UTF 编码是为了UNICODE编码设计的一种存储和传输时节省空间的编码方案
str --- 在内存中使用了Unicode表示字符串
bytes --- 字节类型,网络传输或存储磁盘时使用二进制表示,以b开头
b'\xs2\xb0'
作用 --- 将字符串str 转为二进制(bytes)压缩成 bytes类型
格式 --- strname.encide(encoding = ' 编码格式 ')
编码格式 --- 可以省略,默认为UTF-8 ,也可以省略encoding =
- str1 = '书山有路清胃经'
- by1 = str1.encode('GBK')
- by2 = str1.encode()
- print('原字符串:%s' % str1, '转为GBK:%s' % by1, "转为UTF-8:%s" % by2, sep='\n')
-
- 结果:
- 原字符串:书山有路清胃经
- 转为GBK:b'\xca\xe9\xc9\xbd\xd3\xd0\xc2\xb7\xc7\xe5\xce\xb8\xbe\xad'
- 转为UTF-8:b'\xe4\xb9\xa6\xe5\xb1\xb1\xe6\x9c\x89\xe8\xb7\xaf\xe6\xb8\x85\xe8\x83\x83\xe7\xbb\x8f'
-
作用 --- 将bytes类型二进制数据转换为字符串
格式 --- bytes.decode( endcoding = ' UTF-8 ')
- str1 = '书山有路清胃经'
- by1 = str1.encode('GBK')
- by2 = by1.decode('GBk')
- print('原字符串:%s' % str1, '转为GBK:%s' % by1, "解码%s" % by2, sep='\n')
- str1 = '书山有路清胃经'
- by1 = str1.encode('GBK')
- by2 = by1.decode('GBk')
- print('原字符串:%s' % str1, '转为GBK:%s' % by1, "解码%s" % by2, sep='\n')
-
- 结果:
- 原字符串:书山有路清胃经
- 转为GBK:b'\xca\xe9\xc9\xbd\xd3\xd0\xc2\xb7\xc7\xe5\xce\xb8\xbe\xad'
- 解码书山有路清胃经
-