Python之第六章 内置容器 --- 字符串
创始人
2024-01-20 18:11:14
0

目录

Python之第六章 内置容器 --- 字符串

1.概念

2.凭借字符串 --- +

3.多行字符串

4.字符串的切片

例 输入员工省份证号,输出出生日期

5.分隔合并字符串

分隔字符串

合并字符串

6.字符串的查找

count( ) 方法

find( ) 方法

startswitch( ) 方法

endswitch( ) 方法

7.字母大小写转换

        大写 - > 小写:strname.lower( )

        小写 - > 大写:strname.upper( )

8.判断是否为字母

例 判断字符串中字母出现的次数

9.字符串的删除

        strname. strip(char) 方法 --- 删除字符串左右指定字符

        strname.lstrip(char) --- 删除祖父穿左侧指定字符

        strname.rstrip(char) --- 删除字符串右侧指定字符

例1 统计字符串中单词个数

strname.replace( ' 需要替换字符串 ', ' 替换结果 ')

10.字符串文本对齐

居中 --- center

左对齐 --- ljust

右对齐 --- rjust

11.程序案例

例1 编写程序,检测输入的字符串密码是否是一个合法的密码,规则如下:密码必须至少八个字符,只能包含英文和数字,密码至少包含2个数字

例2 编写程序,实现输入一个二进制数转换为十进制数,如:1001 十进制 9,1 * 2^0+0 * 2^1+0 * 2^2+1 * 2 ^3

例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个内容,输出标准书号。

例4 统计字符串汇总字母个数,存储到列表b[26],a的个数存储在b[0],b的个数存储在b[1],z的个数存储在b[25]

例5 将字符串中大写字母改写为下一个字母,Z字母改为A

例6 将2个字符串逆置后交叉合并到新字符串中,如:str1= ‘abcdef ’,str2 = ‘12345678’,str3 = f8e7d6c5b4a321

例7 字符串排序,Python中字符串类不允许直接修改元素,需要将其转换为列表之后进行排序,排完后转回字符串

例8 排除字符串首尾个元素,剩余内容排序

12.格式化字符串

13.通过format()方法来实现

14.字符串编码

Unicode和UTF-8的关系

UTF的分类 

15.Python中的字符串的两种类型

使用encode()方法编码

使用decode()方法解码


Python之第六章 内置容器 --- 字符串

1.概念

        字符串 --- 由 ' ' 或 " " 包裹起来的任意不可变序列文本序列

str1 = 'china'  # 字符串
print(str1[0])  # 字符串常量不可变,但支持列表索引的操作
str2 = ['china', 'hello', 'nihao ']  # 二维字符串 或 字符串列表
str2[0] = 'CHINA'
print(str2)
​
结果:
c
['CHINA', 'hello', 'nihao ']

        单双引号使用

print('几多.范罗苏姆外号“龟叔”')
​
结果:
几多.范罗苏姆外号“龟叔”

2.凭借字符串 --- +

str1 = "我今晚跑步数为:"
num = 3200
print(str1+num) # 报错 ,字符串的拼接只能是字符串
print(str1+str(num))
​
结果:
我今晚跑步数为:3200

注意:

字符串的拼接只能是字符串,其他类型会发生报错。

3.多行字符串

        字符串长度多余一行时,可以使用三引号将字符串包夹

str1 = '''china 
china china
china china china '''
print(str1)
​
结果:
china 
china china
china china china 

4.字符串的切片

        原则 --- 字符串属于不可变序列,可以通过切片来实现字符串的截取

        格式 --- 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 日
该员工为:男性

5.分隔合并字符串

分隔字符串

        分隔 --- 将字符串分隔为列表

        格式 --- 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 --- 被合并的字符串 --- 迭代对象

6.字符串的查找

count( ) 方法

        作用 --- 检索字符串在另一串中出现的次数,若不存在返回 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

find( ) 方法

        作用 --- 检索是否包含指定字符串,若不存在则返回 -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 实现

startswitch( ) 方法

        作用 --- 检索字符串是否以指定字符串开头

endswitch( ) 方法

        作用 --- 检索字符串是否以指定字符串结尾

7.字母大小写转换

        大写 - > 小写:strname.lower( )

        小写 - > 大写:strname.upper( )

str1 = input()
print(str1.lower())
print(str1.upper())
​
结果:
awdanga414515ADFJWIFOAF
awdanga414515adfjwifoaf
AWDANGA414515ADFJWIFOAF

注意:

        这两种内置方法只能实现单一转换不能互换

        大小写互换 - > strn.swapcase( )

str1 = input()
print(str1.swapcase())
​
结果:
asdahSDAHDKAdahsda
ASDAHsdahdkaDAHSDA

8.判断是否为字母

        格式 --- 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}

9.字符串的删除

        strname. strip(char) 方法 --- 删除字符串左右指定字符

        strname.lstrip(char) --- 删除祖父穿左侧指定字符

        strname.rstrip(char) --- 删除字符串右侧指定字符

没写char,则默认删除对应位置空白字符( \t \n \r 空格)

例1 统计字符串中单词个数

# 例1 统计字符串中单词个数
str1 = input('请输入一串字符:')
str1 = str1.strip()  # 删除左右空白字符(空格)
# 方法:判断当前字符不是空格,下一个字符是空格
cnt = 1
i = 0
while i < len(str1) - 1:if str1[i] != ' ' and str1[i + 1] == ' ':cnt += 1i = i + 1
if str1 == '':cnt = 0
print('单词个数为:', cnt)
​
结果:
请输入一串字符:aa dwh fqif fqf fwqf hieg fqw
单词个数为: 7

strname.replace( ' 需要替换字符串 ', ' 替换结果 ')

str1 = '***dasd***dgrh***'
str1 = str1.replace('*', '0')
print(str1)
​
结果:
000dasd000dgrh000

10.字符串文本对齐

居中 --- center

左对齐 --- ljust

右对齐 --- rjust

poem = '浮舍', '魈', '疾风之下', '亦有归途', '我于花露之中绽放', "亦如黎明中的花朵"
for i in poem:print('|%s|' % i)
# 删除左右空白
# 居中
for i in poem:print('|%s|' % i.strip().center(10))结果:
|浮舍|
|魈|
|疾风之下|
|亦有归途|
|我于花露之中绽放|
|亦如黎明中的花朵|
|    浮舍    |
|    魈     |
|   疾风之下   |
|   亦有归途   |
| 我于花露之中绽放 |
| 亦如黎明中的花朵 |

11.程序案例

例1 编写程序,检测输入的字符串密码是否是一个合法的密码,规则如下:密码必须至少八个字符,只能包含英文和数字,密码至少包含2个数字

# 例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

# 例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 ** telse:print('无效数字')f = 0breakt = t + 1  # 权值+1if 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个内容,输出标准书号。

# 例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) * tt += 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]
# 方法一
例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

# 例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

# 例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 += 1j += 1
print(str3)
​
结果:
请输入一个字符串:123456
请输入另一个字符串:abcd
123456
abcd
6d5c4b3a21

例7 字符串排序,Python中字符串类不允许直接修改元素,需要将其转换为列表之后进行排序,排完后转回字符串

# 例7 字符串排序,Python中字符串类不允许直接修改元素,需要将其转换为列表之后进行排序,排完后转回字符串
str1 = '987654321'
list1 = list(str1)
list1.sort()
str1 = ''.join(list1)
print(str1)
​
结果:
123456789
​

例8 排除字符串首尾个元素,剩余内容排序

# 例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

12.格式化字符串

        定义 --- 改格式化字符串是指指定一个模板,该模板留出一些空位,在根据需要天上相应的内容

        实现 --- 通过操作符 % 实现 --- %[ - ] [ + ] [ 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.

13.通过format()方法来实现

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 --- 类型

14.字符串编码

        ASCII码 --- 对10个数字、52个英文大小写字母、其他字符进行编号最多表示256个字符,每个字符占1B

        GBK\GBK2312 --- 中文汉字编码,1B表示英文字母,2B表示汉字

Unicode和UTF-8的关系

        Unicode --- 称为万国码、统一码,用于满足跨语言、跨平台的文件转换处理要求

        Unicode --- 包含全球所有国家的字符编码的映射关系,已达到编码的统一使用

        Unicode --- 表示字符太浪费空间,为了解决字符的存储和传输问题而产生了UTF编码

UTF --- Unicode Transformation Format --- 只用于存储和传输的时候使用,便于存储和传输时节空间和时间

UTF的分类 

        UTF-8 --- 使用1、2、3、4个字节表示字符,优先使用1B来表示字符,无法满足时增加1B,最多4B,英文占1B,欧洲语系2B,东亚语系3B,其他特殊字符占4B

        UTF-16 --- 使用2、4字节表示字符

        UTF-32 --- 直接使用4字节

总结 --- UTF 编码是为了UNICODE编码设计的一种存储和传输时节省空间的编码方案

15.Python中的字符串的两种类型

        str --- 在内存中使用了Unicode表示字符串

        bytes --- 字节类型,网络传输或存储磁盘时使用二进制表示,以b开头

b'\xs2\xb0'

使用encode()方法编码

        作用 --- 将字符串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'
​

使用decode()方法解码

        作用 --- 将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'
解码书山有路清胃经
​

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...