栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

day9 字符串

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

day9 字符串

1.2.2 转义字符

转义字符 - 在特定符号前加表示特殊功能或者特殊意义的字符 各语言通用

n - 换行
t - 水平制表符 相当于tab键 
 - 表示一个普通的单引号
 - 表示一个普通的双引号
\ - 表示一个普通的反斜杠

注意

转义字符的长度为1。

想要实现一般tab键的功能最好采用t,因为t的长度为1 而tab键的长度可能不一致。

str1 abcn123 
print(str1)
# abc
# 123
str1 abct123 
print(str1) # abc 123
# str1 It s OK # 报错
str1 It s OK 
print(str1) # It s OK
str1 It s OK 
print(str1) # It s OK
str1 I say,  good good study. 
print(str1) # I say, good good study. 
str1 I say, good good study. 
print(str1) # I say, good good study. 
str1 C:User\name小明 
print(str1) # C:Username小明
# u四位的16进制编码 - 字符编码
str1 u4e00abc 
print(str1) # 一abc
1.3 字符编码 计算机在存储数据时只能存数字(实质存的是数字对应的二进制的补码)

计算机存储图片 存的是每一个像素点的颜色 RGB值

计算机存储视频 存的是每一帧图像的每个像素点的颜色 RGB值

2 为了能够让计算机存储文字 给每个字符对应了一个固定数字 每次在存储这个字符的时候就存储这个字符对应的数字。

每个字符对应的数字就是这个字符的编码值

编码表 - 记录每一字符对应的编码值

1.3.1 常用字符编码
 0 - 48
 A - 65
 a - 97
1.4 编码表

编码表 - 记录字符和数字对应关系的表

常用的编码表 ASCII码表、Unicode编码表 Python

Unicode编码表是ASCII码表的扩展版

1.4.1 ASCII码表

a.只记录了美国的符号 这里没有记录中文

b.顺序 从前往后 数字字符 ‘0’-48 、大写字母 ‘A’-65 、小写字母 ‘a’-97 。并且三类符号之间不连续。

 0 - 48
 A - 65
 a - 97
1.4.2 Unicode编码表

a.是ASCII码表的扩展 包含了ASCII码表 记录了世界上所有国家所有名族所有语言的符号

b.中文范围 4e00 ~ 9fa5 (共20901个)

 u4e00 # 一
 u9fa5 # 龥
1.5 编码值的使用 1.5.1 chr函数

chr(编码值) - 获取编码值对应的字符

print(chr(97)) # a
print(chr(0x4e00), chr(0x9fa5)) # 一 龥
# 练习 打印所有中文
num 0
for x in range(0x4e00, 0x9fa5 1):
 num 1
 print(chr(x), end )
 if num 30:
 print()
 num 0
1.5.2 ord函数

ord(字符) - 获取字符编码值

print(ord( 婷 )) # 23159
1.5.3 编码字符

u四位的16进制编码值

print( a , u0061 ) # a a
print( au0061 ) # aa
# 判断一个字符是否为中文
if u4e00 c u9fa5 :
 print( 中文 )
2. 进制 2.1 十进制

基数 0 ~ 9

表示方法 直接写

转换函数 直接写

num 1234567890
2.2 二进制

基数 0、1

表示方法 加前缀0b/0B

转换函数 bin(数据)

num 0b101
print(num) # 5 1*2º 0*2¹ 1*2²
2.3 八进制

基数 0~7

表示方法 加前缀0o/0O

转换函数 oct(数据)

num 0o23
print(num) # 19 3*8º 2*8¹
2.4 十六进制

基数 09 af(A~F)

表示方法 加前缀0x/0X

转换函数 hex(数据)

num 0xaf2 # 2802 2*16º 17*16¹ 10*16²
print(hex(100)) # 0x64
print(bin(100)) # 0b1100100
print(oct(100)) # 0o144
3. 字符串的相关操作和相关函数 3.1 查

查 - 获取字符

字符串获取字符和列表获取元素的语法一样

str1 how are you? i am fine, and you? 
print(str1[2], str1[-1]) # w ?

注意 一个转义字符的长度是1

str1 tabcn123u6afa # 123櫺
# print(str1)
print(str1[1], str1[-2]) # a 3
print(str1[1:6]) # abcn1
print(str1[-1:2]) # ,步长和方向不一致 取不到值
print(str1[1:7:2]) # ac1 
print(str1[-1::-2]) # -2nbt 
print(str1[2:]) # bcn123u6afa 
print( ------- )
for x in str1:
 print(x)
3.2 、*

1 两个字符串比较大小 比较的是第一对不相等字符的编码值大小

2 两个字符比较大小 比较的是字符的编码值的大小

3 应用

已知字符X

判断是否是数字字符 ‘0’ x ‘9’

判断是否是小写字母 ‘a’ x ‘z’

判断是否是大写字母 ‘A’ x ‘Z’

判断是否是字母 ‘a’ x ‘z’ or ‘A’ x ‘Z’

判断是否是中文 ’u4e00’ x ‘u9fa5’

print( abc acb ) # False
print( abc Abc123 ) # True,编码值 a A
print( 你好 hello ) # True
# 练习1 已知一个字符串 统计字符串中中文出现的次数
str1 - sh是uM09K你好! 
count 0
for string in str1:
 if u4e00 string u9fa5 :
 count 1
print( 中文出现的次数 , count) # 中文出现的次数 3
# 练习2 判断指定字符串是否是纯数字字符串
# 234445 - 是 122h2333 - 不是
str1 234445 
str2 122h2333 
for string in str1:
 # if string 0 or string 9 :
 if not 0 string 9 :
 print( 不是 )
 break
else:
 print( 是 )
# 练习3: 提取字符串中所有的大写字母
# - sh是uM09K你好! - MK 
str1 - sh是uM09K你好! 
new_str 
for string in str1:
 if A string Z :
 new_str string
print(new_str) # MK
3.4 in 和 not in

字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串

print(10 in [10, 20, 30]) # True
print([10, 20] in [10, 20, 30]) # False
print( a in abc123 ) # True
print( abc in abc123 ) # True
print( ac in abc123 ) # False
3.5 相关函数 3.5.1 len(字符串)

注意 一个转义字符长度为1

3.5.2 str(数据)

str(数据) - 将数据转换为字符串 任何数据都能转换为字符串 转换的时候是直接在数据的打印值外边加引号

x 23
str(23) # 23 
str(12.5) # 12.5 
str(True) # True 
str([10, 20]) # [10, 20] ,逗号后边有空格 自动规范格式 
str({ a : 18, b : 32}) # { a :18, b :32} ,加的是双引号 自动规避单双引号引起的歧义 
print(str({ a : 18, b : 32}))
3.3 比较运算

1 两个字符串比较大小 比较的是第一对不相等字符的编码值大小

2 两个字符比较大小 比较的是字符的编码值的大小

3 应用

已知字符X

判断是否是数字字符 ‘0’ x ‘9’

判断是否是小写字母 ‘a’ x ‘z’

判断是否是大写字母 ‘A’ x ‘Z’

判断是否是字母 ‘a’ x ‘z’ or ‘A’ x ‘Z’

判断是否是中文 ’u4e00’ x ‘u9fa5’

print( abc acb ) # False
print( abc Abc123 ) # True,编码值 a A
print( 你好 hello ) # True
# 练习 已知一个字符串 统计字符串中中文出现的次数
str1 - sh是uM09K你好! 
count 0
for string in str1:
 if u4e00 string u9fa5 :
 count 1
print( 中文出现的次数 , count) # 中文出现的次数 3
# 练习2 判断指定字符串是否是纯数字字符串
# 234445 - 是 122h2333 - 不是
str1 234445 
str2 122h2333 
for string in str1:
 # if string 0 or string 9 :
 if not 0 string 9 :
 print( 不是 )
 break
else:
 print( 是 )
# 练习3: 提取字符串中所有的大写字母
# - sh是uM09K你好! - MK 
str1 - sh是uM09K你好! 
new_str 
for string in str1:
 if A string Z :
 new_str string
print(new_str)
4. r语法

在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(每个符号都会变成普通字符)

应用 路径前最好加r
str1 r c:usernametestdemo.py 
print(str1) # c:usernametestdemo.py
5. 字符串格式化
# name input( 请输入姓名 )
# age int(input( 请输入年龄 ))
name 小明 
age 18
# message xxx今年xx岁 
# 方法一 
message name 今年 str(age) 岁 
print(message)
# 方法二 
message %s今年%d岁 % (name, age)
print(message)
# 方法三 
message f {name}今年{age}岁 
print(message)
5.1 格式字符串

语法 包含格式占位符的字符串 % (数据1, 数据2, …)

格式占位符 (各门语言通用)

%s - 字符串占位符 python中 %s可以给任何类型的数据占位 任何数据都能转换为字符串 转化时会将数据转换为字符串 %d - 整数占位符(如果数据为浮点数 会自动转化为整数)%f - 浮点数占位符%.Nf - 浮点数保留N位小数
# 1 %s可以给任何类型的数据占位
str1 %sxxx % 张三 # 只有一个数据的话可以把括号省略
print(str1) # 张三xxx
str1 %s-xxx % [10, 20] # 只有一个数据[10, 20]
print(str1) # [10, 20]-xxx
# 2 %d可以给任何能转换成数字的数据占位
str1 %d-xxx % 12.5
print(str1) # 12-xxx
# 3 %f可以给任何能转换成数字的数据占位
str1 %f - xxx % 4.34
print(str1) # 4.340000 - xxx
str1 余额 %.2f % 3241.2345
print(str1) # 余额 3241.23
str1 %s今年%d岁 月薪 %.2f元 % (name, age, 1000 2000)
print(str1) # 小明今年18岁 月薪 3000.00元
5.2 f-string

基本用法

语法 f’{任何有结果的表达式}’ - 用表达式的结果来填充{}所在的位置

‘{数据}’ - {数据} {}内的数据原样显示f’{数据}’ - 将{}内的数据进行替换
# 基本用法
name 小明 
age 18
str1 f {name}xxx{age}xxx{age*10}zzz{name[-1]} 
print(str1) #小明xxx18xxx180zzz明

加参数

语法 f’{任何有结果的表达式:参数}’

参数

.Nf - 保留N位小数。例如 12.32
 - 每三位用逗号隔开。例如 金额:12,345,677
% - 将数据转换为百分比。例如 12%
.N% - 将数据转换为百分比 比值保留N位小数
X N - 将数据转换为长度为N的字符串 不够在前面用X对应的字符来填充
X N - 将数据转换为长度为N的字符串 不够在后面用X对应的字符来填充
# a. ,nf
money 123456
str1 f 余额 {money:.2f} 
print(str1) # 余额 123456.00
# b. ,
str1 f 余额 {money:,} 
print(str1) # 余额 123,456
# c. % / .N%
rate 0.5
str1 f 市值占有率 {rate:%} 
print(str1) # 市值占有率 50.000000%
str1 f 市值占有率 {rate:.2%} 
print(str1) # 市值占有率 50.00%
# d. X N X N - 决定填充的时候填在前面还是后面( 是前面 是后面)
# X - 填充字符
# N - 目标长度
num 9 
str1 f python2000{num:0 3} 
print(str1) # python2000009
str1 f python2000{num:0 3} 
print(str1) # python2000900
6. 字符串相关方法

菜鸟教程有字符串的全部方法 [https://www.runoob.com/python3/python3-string.html]

6.1 center、rjust、rjust、zfil

字符串.center(长度,填充字符) - ‘abc’.center(7, ‘x’) - ‘xxabcxx’

字符串.rjust(长度,填充字符) - ‘abc’.rjust(7, ‘x’) - ‘xxxxabc’

字符串rjust(长度,填充字符) - ‘abc’.ljust(7, ‘x’) - ‘abcxxxx’

字符串.zfill(长度) 字符串.rjust(长度,‘0’)- ‘abc’.zjust(7) - ‘000abc’

其中

​ center 将原字符中间对齐 并使用填充字符将其填充为指定长度

​ rjust 将原字符右对齐 并使用填充字符将其填充为指定长度

​ ljust 将原字符左对齐 并使用填充字符将其填充为指定长度

​ zfill 将原字符右对齐 并使用填充字符0将其填充为指定长度

print( abc .center(7, x )) # xxabcxx
print( abc .zfill(7)) # 0000abc
print( abc .center(6, x )) # xabcxx
6.2 count

字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数

字符串1.count(字符串2,开始下标 结束下标) - 在字符串1中[开始下标,结束下标)范围内统计字符串2出现的次数

str1 how are you? i am fine, thank you! and you? 
print(str1.count( you )) # 3
print(str1.count( a , 0, 12)) # 1,第12位取不到
6.3 find、index

字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的为位置 范围0开始的下标值(从前往后找) 如果不存在返回-1

字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的为位置 范围0开始的下标值(从前往后找) 如果不存在会报错

字符串1.find(字符串2,开始下标 结束下标) - 在字符串1中[开始下标 结束下标)范围内获取字符串2第一次出现的为位置

字符串1.index(字符串2,开始下标 结束下标) - 在字符串1中[开始下标 结束下标)范围内获取字符串2第一次出现的为位置

str1 how are you? i am fine, thank you! and you? 
print(str1.find( you )) # 8
print(str1.index( you )) # 8
print(str1.find( you1 )) # -1,表示找不到
# print(str.index( you1 )) # 报错
print(str1.find( you , 5, 15)) # 8
print(str1.index( you , 10, -1)) # 30
6.4 rfind、rindex

字符串1.rfind(字符串2) - 获取字符串1中字符串2第一次出现的为位置 范围-1开始的下标值(从后往前找) 如果不存在返回-1

字符串1.rindex(字符串2) - 获取字符串1中字符串2第一次出现的为位置 范围-1开始的下标值(从后往前找) 如果不存在会报错

字符串1.rfind(字符串2,开始下标 结束下标) - 在字符串1中[开始下标 结束下标)范围内获取字符串2第一次出现的为位置

字符串1.rindex(字符串2,开始下标 结束下标) - 在字符串1中[开始下标 结束下标)范围内获取字符串2第一次出现的为位置

str1 how are you? i am fine, thank you! and you? 
print(str1.rfind( you )) # 8
print(str1.rindex( you )) # 8
6.5 isalnum

字符串.isalnum() - 判断字符串是否只有字母或者数字 是返回

注意 只判断ASCII码内的内容 ASCII外的内容不管

print( ahs234函数 ) # True,它只判断ASCII码内的内容 ASCII外的内容不管
6.6 isdigit、isnumeric

字符串.isdigit() - 判断是否是纯数字字符串 数字指0~9的数字字符

字符串.isnumeric() - 判断是否是纯数字字符串 数字指具有数字意义的字符

print( 12345 .isdigit()) # True
print( 12345 .isnumeric()) # True
print( 12345一二十百千万 .isnumeric()) # True
print( 12345壹 .isnumeric()) # True
print( 12345① .isnumeric()) # True
6.7 islower isupper

字符串.islower() - 判断字符串是否是纯小写字母字符串

字符.islower() - 判断字符串是否是纯小写字母字符串

字符串.isupper() - 判断字符串是否是纯大写字母字符串

字符.isupper() - 判断字符串是否是纯大写字母字符串

print( abC .islower()) # False
print( abC .isupper()) # False
6.8 join

字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个新的字符串

注意

序列中的元素必须是字符串,不然会报错

如果序列为列表 则列表中的元素必须是字符串才行

result .join( abc ) # 将 abc 中各元素用 拼接成一个新的字符串
print(result) # a b c
result and .join( abc )
print(result) # aandbandc
result .join([ 小明 , 张三 ])
print(result) # 小明 张三
result .join([ 小明 , 张三 ]) # 想要无缝连接 则采用空串 连接
print(result) # 小明张三
# 练习1 将下面列表中的元素合并成一个字符串
# [ abc , 100, 12.5, True, hello ] - abc10012.5Truehello 
list1 [ abc , 100, 12.5, True, hello ]
str1 .join(str(x) for x in list1)
print(str1)
# 练习2 已经一个列表保存多个学生的分数 提取所有学生的姓名 以一个字符串的形式返回
# [{ name : 张三 , age : 18}, { name : 小明 , age : 20},
# { name : 小花 , age : 30}] - 张三,小明,小花 
students [{ name : 张三 , age : 18}, { name : 小明 , age : 20}, { name : 小花 , age : 30}]
result , .join(x[ name ] for x in students)
print(result)
6.9 lower、upper

字符串.lower() - 转换字符串中的大写字母为小写

字符串.upper() - 转换字符串中的小写字母为大写

6.10 strip.lstrip.rstrip

字符串.strip() - 去除字符串两端的空白字符

字符串.lstrip() - 去除字符串前端 即左端 的空白字符

字符串.lstrip() - 去除字符串后端 即右端 的空白字符

空白字符 空格、tab键、换行

str1 tabc123 n 
print(str1) # abc123
print(str1.strip()) # abc123
print(str1.lstrip()) # abc123
print(str1.rstrip()) # abc123
6.11 replace

字符串1.replace(字符串2 字符串3) - 将字符串1中所有字符串2替换为字符串3

字符串1.replace(字符串2 字符串3,替换次数N) - 将字符串1中前N个字符串2替换为字符串3

str1 how are you? i am fine, thank you! and you? 
result str1.replace( you , me )
print(result) # how are me? i am fine, thank me! and me?
result str1.replace( you , me , 2)
print(result) # how are me? i am fine, thank me! and you?
6.12 maketrans、translate

两者一般成对使用

str.maketrans(字符串1 字符串2) - 创建字符串1和字符串2的字符对应表

注意 字符串1和字符2的长度一致 对应位置上的字符相对应

字符串.translate(表) - 将字符串按照表内的字符替换方式进行替换

str1 how are you? i am fine, thank you! and you? 
table str.maketrans( ain , 你我他 ) # a-你 i-我 n-他
result str1.translate(table)
print(result) # how 你re you? 我 你m f我他e, th你他k you! 你他d you?
# 练习 将字符串中所有的阿拉伯数字都替换成对应的中文数字
# 123木头人 88 - 一二三木头人 八八 
str1 123木头人 88 
table str.maketrans( 0123456789 , 零一二三四五六七八九 )
result str1.translate(table)
print(result) # 一二三木头人 八八
6.13 split

字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点进行切割 返回一个由切割后的字符段 不包含字符串2 字符段数量一定是切割点的数量加1 组成的列表 列表中各元素为切割后的各字符段

注意

切割后的字符段数量 切割点的数量 1

如果切割点在最前面或者最后面或者出现连续切割点 结果会出现空串

str1 how are you? i am fine, thank you! and you? 
str2 str1.split( you )
print(str2) # [ how are , ? i am fine, thank , ! and , ? ]
# 如果切割点在最前面或者最后面或者出现连续切割点 结果会出现空串
str1 abcaanea 
print(str1.split( a )) # [ , bc , , ne , ]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号