1.字符串和字符
1.什么是字符串(str)
字符串是容器型数据类型, 将''、""、''''''、""""""作为容器的标志里面的每一个基本符号就是字符串的元素
字符串是不可变(不支持增删改); 字符串是有序的(支持下标操作)
元素: 引号的每个基本单元就是字符串的元素, 又叫字符(python中只有字符的概念没有字符对应的类型,一般使用
长度为1的字符串来表示字符)
1) 空字符串
2) ‘’、""、’’’’’’、""""""的区别
‘’、"" - 字符串中不能直接换行
s5 = 'sdasdasdsadasda'
s6 = """
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡.
"""
print(s5)
print(s6)
3) 字符串有序
print(“abc” == “cba”) # False
2.字符
字符分为普通字符和转义字符两种:
1) 转义字符
在特定的一个或者多个符号前加\让符号具有特殊的功能或者特殊的意义。那么这种带有\字符就是转义字符
\n - 换行
\t - 水平制表符(相当于按一下tab键)
\' - 表示一个单引号
\" - 表示一个普通的双引号
\\ - 表示一个普通的反斜杠
注意: 任意一个转义字符长度都是1
2) 除了转义字符以外的都是普通字符, 普通字符在字符串中表示这个符号本身, 包括: 汉字、数字、字母、符号、表情符号等...
特殊的转义字符 - 编码字符: \u四位十六进制数 - 表示十六进制数对应的编码值对应的字符
str5 = 'abc\u9999' # abc香
print(str5)
str1 = '\tab\'c\n123'
str2 = "hello \"world"
print(str1)
str3 = '123\\n456'
print(str3) # 123\n456
3.字符编码
1) 什么是字符编码
计算机在存储数据的时候只能存数字(存的数字二进制补码), 为了能够让计算机存储字符,
我们给每一个符号都对应一个固定的数字,那么每个字符对应的固定的数字就是这个字符的编码值
2) 字符编码表 - 记录字符和数字之间一一对应关系的标就是字符编码表
常见的字符编码表有两个:ASCII码表、Unicode编码表
a.ASCII码表
ASCII码表总共有128个字符对应的编码,主要包含的是美国的通用符号其中包括: 英文标点符号、数字字符、字母字符以及其他的一些符号
ASCII表中, 数字字符在字母前面, 大写字母在小写字母的前面, 大写字母和小写字母中间有间隔,每个大写字母和对应的小写字母之间间隔32
b.Unicode编码表
Unicode编码表包含ASCII码表
中文编码范围: 4e00 - 9fa5
1) 编码字符
print('\u1100') # ᄀ
print('\u11ef') # ᇯ
print('\u0f00\u0f03') # ༀ༃
print('\u4e00\u9fa5 \u5af1') # 一龥 嫱
2) chr(编码值) - 获取编码值对应的字符
print(chr(0x4e00)) # 一
print(chr(97)) # a
count = 0
for i in range(0x4e00, 0x9fa5+1):
print(chr(i), end=' ')
count += 1
if count % 25 == 0:
print()
3) ord(字符) - 获取字符的编码值(返回的是十进制数)
2.字符串操作
1.获取字符
字符串获取字符和列表获取元素的方法一样
1) 获取单个字符
sentence = '我们LGD是不可战胜的!'
print(sentence[::-1]) # !的胜战可不是DGL们我
2) 字符串切片
sentence2 = 'good good study! day day up!'
print(sentence2[5:-2]) # good study! day day u
print(sentence2[::-1]) # !pu yad yad !yduts doog doog
3) 遍历
for x in sentence2:
print('x:',x)
for index, item in enumerate(sentence2):
print(index, item)
for i in range(len(sentence2)):
print(i, sentence2[i])
2.加法和乘法
print('abc' + '123') # abc123
print('abc' * 3) # abcabcabc
3.比较大小
两个字符串比较大小: 比较第一对不相等的字符编码值大小
char
'a' <= char <= 'z' - 小写字母
'A' <= char <= 'Z' - 大写字母
'a' <= char <= 'z' or 'A' <= char <='Z' - 字母
'0' <= char <= '9' - 数字字符
'\u4e00' <= char <= '\u9fa5' - 中文字符
print("abc" > "XYZ") # True
print("abc" > "你好!") # False
4. in 和 not in
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)
5. 相关函数
len、str
2) str(数据) - 将数据转换成字符串
a.哪些能转:所有的数据都可以转换成字符串
b.怎么转:在数据打印值外面加引号
c.字符串转数字
3.格式字符串
当一个字符串中有一个或者多个部分是变化的时候,我们可以用字符串加法运算、格式字符串和f字符串来实现这个功能
1.格式字符串
格式字符串:在字符串中用格式占位符代替字符串变化的部分,然后在后面用数据来给格式占位符赋值
语法:
带有格式占位符的字符串 % (数据1, 数据2, 数据3, ...)
说明:
1) % - 固定写法
2) () - 固定写法, 在数据只有一个的时候可以省略
3) 数据 - 数据必须和占位符的个数一致; 类型一致一一对应
4) 格式占位符 - 格式占位符有哪些, 对应的数据类型是什么都是固定的
%s - 字符串(可以是其他数据)
%d - 整数
%f - 浮点数; %.Nf - 浮点数保留N位小数
name = input('姓名:')
age = int(input('年龄:'))
money = float(input("月收入:"))
message = '%s今年%d岁月薪%.2f元' % (name, age, money)
print(message)
2.f-string
- format方法
包含{}的字符串.format(数据1, 数据2, …) - 字符串中{}就相当于格式字符串中的占位符
a.{}
message = '{}今年{}岁, 月薪{}元'.format(name, age, money)
print(message)
b.{下标} - 下标指的是获取format中第几个数据, 从0开始
'年龄:xx', '今年:xx'
message = '年龄:{0}, 今年: {0}'.format(age)
c.{key}
message = '{name}的年龄,{age}, 今年{age}岁'.format(age=age, name=name)
print(message)
2)格式约束: {:约束条件}、{下标:约束条件)、{key:约束条件}
约束条件
.Nf - 保留N位小数(四舍五入)
字符 > Nd - 约束数字宽度位N, 不够的在前面用指定符填充
字符 < Nd - 约束数字宽度位N, 不够的在后面用指定符填充
, - 将数字三位一组用逗号隔开
% - 将小数转换成百分比数据, 保留6位小数
.N% - 将小数转换成百分比数据, 保留N位小数
print('约束1:{:.2f}'.format(3.1415926)) # 约束1:3.14
print('约束1:{0:.3f}'.format(3.1415926)) # 约束1:3.142
print('约束2:{:0<5}'.format(23)) # 约束2:23000
print('约束2:{:0>5}'.format(100)) # 约束2:00100
print('约束2:{: >5}'.format('abc')) # 约束2: abc
print('约束3:{:,}'.format(1000000)) # 约束3:1,000,000
print('约束4:{:.2%}'.format(0.2356)) # 约束4:23.56%
3)f-string - format方法简写
语法:
f'字符串内容'
name = '李华'
age = 80
money = 15454
message = f'{name}今年{age}岁, 月薪:{money/1000}k元!'
print(message) # 李华今年80岁, 月薪:15454元!
message = f'{name}今年{age:0>5}岁, 月薪:{money/1000:.2f}k元!'
print(message) # 李华今年00080岁, 月薪:15.45k元!
4.字符串的相关方法
s.capitalize() - 把字符串第一个字符大写
s.center(width[, fillchar])
fillchar - 填充字符
width - 填充宽度
1.字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
message = 'how are you? i am fine, Thank you'
print("you", message.count('you')) # you 2
print("空格", message.count(' ')) # 空格 7
2.字符串1.find(字符串2) - 获取字符串2第一次在字符串1中出现的位置(返回下标值)
print(message.find('you')) # 8
print(message.find('你好')) # -1(-1是表示找不到不存在与当前字符串中)
字符串1.find(字符串2,开始下标, 结束下标) - 获取字符串2在字符串1指定范围内第一次出现的位置
print(message.find('you', -7)) # 30
print(message.find('you', 0, 10)) # -1
3.字符串.join(字符串序列) - 将序列中所有的元素用指定的字符串拼接产生一个新的字符串
list1 = ['name', 'age', 'abc', '你好']
new_str = ' '.join(list1)
print(new_str) # name age abc 你好
4.
字符串1.replace(字符串2, 字符串3) - 将字符串1中,所有的字符串2都替换成字符串3,产生一个新的字符串
字符串1.replace(字符串2, 字符串3,N) - 将字符串1中,前N个字符串2都替换成字符串3,产生一个新的字符串
new_str = message.replace('you', 'YOU')
print(new_str) # how are YOU? i am fine, Thank YOU
new_str = message.replace('you', 'me', 1)
print(new_str) # how are me? i am fine, Thank you
5.
字符串1.split(字符串2) - 将字符串1中的字符串2作为切割点对字符串1进行切割
字符串1.split(字符串2, N) - 将字符串1中的前N个字符串2作为切割点对字符串1进行切割
message = 'how are you? i am fine, Thank you'
print(message.split(' ')) # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'Thank', 'you']
字符串.zfill(N) - 将字符串转换成一个指定长度的新字符串, 原字符串在邮编,左边用0填充