07 字符串

目录

一、什么是字符串(str)

二、字符

1.转义字符

2.r字符串

3.编码字符 

三、编码扩展

1.字符编码

2.编码表

3.编码值在python中的使用

四、查 - 获取字符

1.查单个

2.切片

3.遍历

五、字符串相关操作

1.数学运算

2.in 和 not in

3.比较运算

六、字符串相关方法

七、容器相关函数

八、格式字符串

1.字符串拼接

2.格式字符串

 3.f-string

九、字符串函数速查

1.判断

2.查找和替换

3.大小写转换

4.拆分和连接

5.去除空白符


一、什么是字符串(str)

字符串是python自带的容器型数据类型
单引号' '或者双引号" "、三个单引号''' '''、三个双引号""" """作为容器的标志,里面的每一个符号都是字符串的元素
字符串是不可变的;字符串是有序的,支持索引操作
字符串的元素又叫字符,任何文字符号都可以作为字符串的元素

str1 = 'mK1,和。😊'
print(str1)

 

三引号对应的字符串幼教多行字符串,字符串内容中可以直接按回车换行

str1 = """hello
world"""
print(str1)
str2 = '''hello
python'''
print(str2)

 

空串 ' ' 内什么都没有,空格也不行

str3 = ''

二、字符

字符串中每个独立的符号就是字符串的元素,又叫字符。

1.转义字符

字符分为两类:
1)普通字符  -   在字符串中表示符号本身的字符
2)转义字符  -   在特定的符号前加 \ 表示特殊功能或者特殊意义的字符

\n换行
\t水平制表符(按一次tab键)
\'表示一个普通的单引号
\"表示一个普通的双引号
\\表示一个普通的反斜杠

当一个字符串中既有单引号又有双引号时,可以单双引号交替使用来避免使用转移符
例如单引号里嵌套双引号,双引号里嵌套单引号

str1 = '\tmn\n12吗'
print(str1)

str1 = 'it\'s me'
print(str1)

str1 = "it's me"
print(str1)

str1 = "i say:\"good good study!day day up!\""
print(str1)

str1 = 'i say:"good good study!day day up!"'
print(str1)

str1 = '\\name'
print(str1)

 

2.r字符串

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

一般在读取文件路径时经常使用

str1 = r'\tabc\n123\'你好'
print(str1)

str1 = r'C:\home\names\test\demo\best\a.txt'
print(str1)

  

3.编码字符 

\u4位的十六进制编码值(u可以是小写也可以是大写)

 每一个字符在字符串中都有两种表示方法:

        a. 在字符串中直接提供字符

        b. 通过字符编码值来使用编码字符

print('a\u0061\u9fa5')

三、编码扩展

1.字符编码

计算机底层设计原理导致计算机在存储数据的时候只存数字(存数字的二进制补码),为了能够让计算机存储文字符号,就给每一个符号关联了一个固定的数字,每次在需要保存这个符号的时候就去保存这个数字。每个符号对应的那个固定的数字就是这个符号的编码值。

2.编码表

保存字符和数字对应关系的表

1)ASCII编码表
美国人制定,只有128个字符;
数字字符在大写字母的前面、大写字母在小写字母的前面、大写字母与小写字母不连续
A - 65
a - 97

大写字母和小写字母不连续,并且差值为32

 2)Unicode编码表(Python)

Unicode编码表中包含ASCII码表
Unicode编码表叫统一码又叫万国码,里面包含了世界上所有的国家、民族使用的所有的符号。
常用中文符号的编码范围:4e00 ~ 9fa5

3.编码值在python中的使用

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

注意:在Python中直接使用16进制数,需要在最前面加前缀:0x、0X

print(chr(97))
# 注:在python程序中直接使用16进制数,需要在最前面加前缀: 0x、0X
# print(chr(0x4e00))
for x in range(0x4DC0, 0x4DFF+1):
    print(chr(x), end=' ')

2)ord(字符) - 获取指定字符对应的编码值 

print(ord('a'), ord('A'))   # 97 65

3)编码字符:\u4位的16进制编码值

str1 = '一\u4e00'
print(str1)

char = '是'
print('\u4e00' <= char <= '\u9fa5')

四、查 - 获取字符

字符串获取字符的方法和列表一模一样

1.查单个

字符串[索引]

message = '\thello\npython!'
print(message[-1])
print(message[0])
print(message[1])

 

如上图,转义字符在字符串中占一个位置,但是打印出来为空(转义字符长度为1)

2.切片

字符串[开始下标 : 结束下标]

下标和前面介绍的一样,取头不取尾

print(message[1:6])    # hello
print(message[-7:])    # python!

str1 = 'hello,python!'
print(str1[0], str1[-1], str1[-2])
print(str1[1:-1:2])     # 'el,yhn'
print(str1[1:-1])
print(str1[-3:])

3.遍历

while:

索引= 0;
长度 = len(字符串) 
while 索引 < 长度: 
    元素 = 字符串[索引] 
    索引+=1 

for:

for 字符 in 字符串:
    print(字符)

五、字符串相关操作

1.数学运算

1)数学运算 +、*

字符串1 + 字符串2   -  将两个字符串合并成一个字符串

字符串 * N       -   将字符串内容重复N次产生一个新的字符串

str1 = '数据分析'
str2 = 'python'
result = str2 + str1
print(result)    # python数据分析

 案例:

# 案例1:在str1中每个数字的后面插入一个'+'
str1 = 'mn23ks9技术0了'
# 'mn2+3+ks9+技术0+了'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x + '+'
    else:
        new_str += x
print(new_str)

# 案例2:删除字符串str1中所有的中文字符
str1 = 'abc健康<M920..是l2集-是'
# ''+'a' -> 'a'+'b' -> 'ab' + 'c' -> 'abc' + '<' -> 'abc<' ...
new_str1 = ''
for x in str1:
    if '\u4e00' <= x <= '\u9fa5':
        continue
    new_str1 += x
print(new_str1)

练习:

# 练习1:提取字符串str1中所有的小写字母
str1 = 'mn23ks9技MK术p0了Kn'
new_str1 = ''
for i in str1:
    if 'a' <= i <= 'z':
        new_str1 += i
print(new_str1)
# 练习2:将字符串str1中所有的大写字母替换成'-'
str2 = 'mn23ks9技MK术p0了Kn'
new_str2 = ''
for j in str2:
    if 'A' <= j <= 'Z':
        new_str2 += '-'
    else:
        new_str2 += j
print(new_str2)
# 练习3:删除字符串str1中所有的字母
str3 = 'mn23ks9技MK术p0了Kn'
new_str3 = ''
for k in str3:
    if not ('a' <= k <= 'z' or 'A' <= k <= 'Z'):
        new_str3 += k
print(new_str3)

2.in 和 not in

字符串1 in 字符串2   -   判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)

str1 = 'hello python'
print('h' in str1)      # True
print('he' in str1)     # True
print('hl' in str1)     # False

3.比较运算

 1)比较是否相等

print('abc' == 'acb')   # False

2)比较字符串大小 

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

字符串的比较运算主要用于判断字符的性质

判断X:
是否是数字字符'0' <= x <= '9'
是否是大写字母'A' <= x <= 'Z'
是否是小写字母'a' <= x <= 'z'
是否是字母 'A' <= x <= 'Z' or 'a' <= x <= 'z'
是否是中文 '\u4e00' <= x <= '\u9fa5'

六、字符串相关方法

 1. 字符串.join(容器)  -  将容器中的元素用指定的字符串拼接成一个新的字符串。

(容器中的元素必须全部都是字符串)

案例:

list1 = ['python', 'java', 'c', 'php', 'go']
result = '+'.join(list1)
print(result)       # 'python+java+c+php+go'

str1 = 'abc'
result = ' And '.join(str1)
print(result)       # a And b And c

练习:

# 练习1: 创建'1+2+3+...+100'的运算表达式字符串
result = "+".join([str(i) for i in range(1, 101)])
print(result)

# 练习2:在字符串str1中的每个字符之间插入一个*
str1 = 'hello'
# 'h*e*l*l*o'
result = "*".join(str1)
print(result)

# 练习3:删除str1中所有的abc
str1 = 'a,d,w,f,ashkabc你好abchello'
print(''.join(str1.split('abc')))    # a,d,w,f,ashk你好hello

2. 字符串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?

str1 = 'how are you? i am fine! thank you! and you?'
result = str1.replace('you', 'me', 2)
print(result)       # how are me? i am fine! thank me! and you?

3. 字符串1.split(字符串2)  - 将字符串1中所有的字符串2作为切割点对字符串进行切割 

返回的是列表,即将切割点换为逗号“  , ”

扩展:

string.split() 按照空格字符串分割 , 返回一个列表
string.split(" 分隔符 ") 按照指定分隔符分割 , 返回一个列表
string.split(" 分隔符 ", 分割次数 ) 按照指定分隔符分割 , 分割指定的次数 , 返回一个列表
string.rsplit(" 分隔符 ", 分割次数 ) 从后面开始按照指定分隔符分割 , 分割指定的次数 , 返回一个列表
str1 = 'how are you? i am fine! thank you! and you?'
result = str1.split('you')
print(result)    # ['how are ', '? i am fine! thank ', '! and ', '?']

result = str1.split('you', 2)
print(result)    # ['how are ', '? i am fine! thank ', '! and you?']

4.字符替换

1) str.maketrans(字符串1,字符串2) - 建立字符和字符之间的对应关系表(两个字符串长度必须一致)

2) 字符串.translate(对应关系表)

# 1) str.maketrans(字符串1,字符串2) - 建立字符和字符之间的对应关系表(两个字符串长度必须一致)
table = str.maketrans('一二三四五六七八九十百千万', '壹贰叁肆伍陆柒捌玖拾佰仟萬')
# 2) 字符串.translate(对应关系表)
str1 = '总销售额:一千五百三十七万,总成本:四八九十二万'

result = str1.translate(table)
print(result)    # 总销售额:壹仟伍佰叁拾柒萬,总成本:肆捌玖拾贰萬

5.判断字母是否大小写

1) 字符.isupper() - 判断指定字符是否是大写字母,返回bool值

2) 字符串.isupper() - 判断指定字符串中的字母是否全大写字母,返回bool值

3) 字符.islower() - 判断指定字符是否是小写字母,返回bool值

# 1) 字符.isupper() - 判断指定字符是否是大写字母,返回bool值
print('a'.isupper())    # False
print('A'.isupper())    # True

# 2) 字符串.isupper() - 判断指定字符串中的字母是否全大写字母,返回bool值
print('ABC你好123'.isupper())    # True
print('AbC你好123'.isupper())    # False

# 3) 字符.islower() - 判断指定字符是否是小写字母,返回bool值
print('a'.islower())      # True
print('123'.islower())    # False

6.字母大小写转换

1)字符.upper() - 如果字符是小写字母就转换成对应大写字母

2)字符.lower() - 如果字符是大写字母就转换成对应小写字母

# 字符.upper() - 如果字符是小写字母就转换成对应大写字母
print('a'.upper())  # A
print('2'.upper())  # 2

print('afgg你是KH'.upper())   # AFGG你是KH

# # 字符.lower() - 如果字符是大写字母就转换成对应小写字母
print('afgg你是KH'.lower())   # afgg你是kh

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

8.判断是否是数字 

 字符.isdigit()  -  判断指定字符是否是数字字符

字符串.isdigit()  - 判断字符串中所有的字符是否都是数字

print('m'.isdigit())    # False
print('23s44'.isdigit())    # False

9.字符串.strip() - 去掉字符串两边的空白字符 

str1 = '      \n\t      he llo                 \n\t'
print(str1.strip())     # he llo

10.查找字符索引

字符串1.find(字符串2)  -  获取字符串2在字符串1中第一次出现的位置

字符串1.rfind(字符串2)  -  获取字符串2在字符串1中最后一次出现的位置

(find方法和index方法都可以查找字符串某个字符的索引,但是当查找字符串中没有的字符时,index方法会报错,而find方法会显示-1——找不到)

str1 = 'mnabc123abc890abc开始abc你好'
print(str1.find('abc'))
print(str1.rfind('abc'))

print(str1.find('hello'))       # -1 (找不到)

print(str1.find('abc', 5))
print(str1.find('abc', 3, 8))

print(str1.index('abc'))
print(str1.rindex('abc'))
# print(str1.index('hello'))        # 报错!

5. f-string  -  将变量中的内容拼接到字符串中

在字符串的最前面加f/F,就可以在字符串中通过{表达式}来提供字符串内容

name = '小明'
age = 18
print(f'{name}今年{age}岁!')

str1 = f'{name[-1]}今年{age + 10}岁!'
print(str1)

a = 100
b = 200
print(f'a:{a}, b:{b}')
print(f'{a}+{b}={a+b}')

七、容器相关函数

1)len(字符串)  - 统计字符串中字符的个数

2)str(数据) - 将指定数据转换成字符串,转换的时候是直接在数据的打印值外面加引号

str(100)        # '100'

list1 = [100,1.23,"abc"]
print(list1)        # [100, 1.23, 'abc']
str(list1)      # "[100, 1.23, 'abc']"

3)eval(字符串) - 去掉字符串外面的引号,获取引号中的数据

abc = 100
result = eval('abc')   # result = abc
print(result)

num_str = '238'
result = eval(num_str)
print(result, type(result))

list_str = '[100, 200, 300, 400]'
result = eval(list_str)
print(result, type(result))

result = eval('100 + 200')      # result = 100 + 200
print(result)

nums = [10, 20, 30]
result = eval('nums[-1] * 100')
print(result)

print('==================高级计算器=================')
value = input('请输入需要计算的算式:')
value = value.replace('x', '*')
value = value.replace('÷', '/')
print(eval(value))

八、格式字符串

1.字符串拼接

message = name + '今年' + str(age) + '岁!'
print(message)    # 小明今年18岁!

2.格式字符串

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

注意:1)后面()中的数据必须和前面字符串中的占位符一一对应

           2)如果()中只有一个数据,这个()可以省略

常用的格式占位符
%s可以给任何类型的数据占位
%d数字占位符,并且会自动将数字转化为整数再拼接到字符串中
%f数字占位符,并且会自动将数字转化为浮点数(默认值保留6位小数)
%.Nf保留N位小数
message = '%s今年%d岁!' % (name, age)
print(message)    # 小明今年18岁!

str1 = 'a:%s,b:%d,c:%.1f' % ([10, 20, 30], 12.956, 19.8792)
print(str1)    # a:[10, 20, 30],b:12,c:19.9

 3.f-string

1)基本用法

在字符串的最前面加f,就可以在字符串里面通过 {表达式} 来提供字符串内容(内容就是{}中表达式的结果)

message = f'{name}今年{age}岁!'
print(message)  # 小明今年18岁!

str1 = f'a:{name}, b:{10 + 20}, c:{name[-1] * 2}'
print(str1)     # a:小明, b:30, c:明明

2)添加参数: {提供数据的表达式:参数}

# 2)添加参数: {提供数据的表达式:参数}
# a. .Nf        -   控制数据保留N位小数
money = 23142.987
str1 = f'月薪:{money:.2f}元'
print(str1)     # 月薪:23142.99元

str1 = f'年薪:{money * 12:.2f}元'
print(str1)     # 年薪:277715.84元

# b. .N% / %     -   让小数拼接的时候显示成百分比(N是用来控制百分比的小数位数)
total = 98
pass1 = 75
str1 = f'及格率:{pass1/total:.1%}'
print(str1)     # 及格率:76.5%

# c. ,      -       让整数部分每三位用一个逗号隔开
money = 187892650.234
print(f'余额:¥{money:,}')     # 余额:¥187,892,650.234

print(f'余额:¥{money:,.2f}')      # 余额:¥187,892,650.23

# d. 符号>N、符号<N、符号^N
# 符号>N 变量一共占N位,不足位数在变量前面补‘符号’
# 符号<N 变量一共占N位,不足位数在变量后面补‘符号’
# 符号^N 变量一共占N位,不足位数,将变量放置中间,两侧补‘符号’
x = 7
num = f'20230102{x:0>5}'
print(num)

九、字符串函数速查

1.判断

2.查找和替换

3.大小写转换

4.拆分和连接

5.去除空白符

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值