day4-字符串总结
1.什么是字符串
序列 有序 不可变。
用单引号或双引号括起来的任意字符集。
2.字符串中的字符
a.普通字符: ‘23’ ‘wefsfewfewq’ ‘😍 🧔🐕’
b.转义字符: \n \t ' " \
阻止转义:r或R加在代码前
4.1字符编码
python中的字符采用的是Unicode编码
- a.什么是编码
就是数字和字符的对应关系,其中字符对应的数字就是字符的编码。
'a' - 97
'b' - 98
'余' - 20313 - b.编码方式
ASCII码:针对数字、字母字符、一些英文中常用的符号进行编码,采用一个字节(0~127 2 ^ 7 - 1 = 127)对字符进行编码(128个字符)
1.大写字母数字小于小写字母数字
2.大写字母与小写字母之间还有其他字符
Unicode码:包含了ASCII码表,同时能够对世界上所有的语言对应符号进行编码。采用2个字节对字符进行编码,能编码65536个字符
中文编码范围:4e00 ~ 9fa5
- c.两个函数
chr(编码值) - 将字符编码转换成字符
ord(字符) - 获取字符对应的编码值,一次只能一个。
print(chr(0x0087))
print(chr(0x1100))
print(chr(0x4e00))
Z = '詹'
H = '洪'
print(ord(Z), ord(H)) #获得的是一个十进制 35449 27946
print(hex(ord(Z)), hex(ord(H))) #十进制转十六进制 0x8a79 0x6d2a
#d.可以将字符编码放到字符串中便是一个字符: \u + 4位的16进制编码值
str1 = 'abc\u4f96123\u1234'
print(str1) # abc侖123ሴ
4.2 获取字符串中的字符
一旦一个字符串确定,那么字符串中每个字符的位置就确定。
而且每个字符会对应一个用来表示其位置和顺序的下标值。
- 1.下标(索引)
字符串中每个字符都有一个下标,代表其在字符串中的位置
下标的范围是:
0到字符串长度减一(0代表第一个字符位置)
-1到负的字符串长度(-1代表最后一个字符的位置)
'abc\n123' # '1' : 下标为4或-3
'abc\u4eff23' # '2' : 下标为4或-2
- 2.获取单个字符
语法:
字符串[下标] -- 获取字符串中,指定下标对应的字符。
说明:
字符串 -- 可以是字符串常量,也可以是字符串变量(只要结果是字符串就行)。
[] -- 固定写法
下标 -- 字符的下标,不能越界 - 3.获取部分字符
语法1:
字符串[开始下标:结束下标:步长]
说明:
字符串 -- 可以是字符串常量,也可以是字符串变量(只要结果是字符串就行)。
[] -- 固定写法
: -- 固定写法
开始和结束下标 -- 字符的下标
步长 -- 整数
功能:
1.从开始下标开始获取到结束下标前为止,每次下标值增加步长对应的值。结果是字符串。
注意:
当步长是正数(从前往后取),开始下标对应的字符要在结束下标对应的字符的前面。
当步长是负数(从后往前取),开始下标对应的字符要在结束下标对应的字符的后面。
结束下标对应的值是取不到的。
str1 = 'abcdefghijklmn'
print(str1[0:6:2]) #ace
print(str1[0:6:1]) #abcdef
print(str1[-1:6:-1]) #nmlkjih 倒着取
语法2:
字符串[开始下标:结束下标] -- 相当于步长是1
print(str1[-1:3]) #空串,啥都没有 '' != ' '
- 4.获取部分字符,省略下标
获取部分字符时,开始下标和结束下标都可以省略
a.开始下标省略
字符串[:结束下标:步长] 或者 字符串[:结束下标]
步长为正,从头开始
步长为负,从尾开始
str2 = 'abc123abc'
print(str2[:4]) #步长为正,从头开始 abc1
print(str2[:4:-1]) #步长为负,从尾开始 cba3
b.结束下标省略
字符串[开始下标::步长] 或者 字符串[结束下标:]
步长为正:从开始下标从前往后获取到字符串结束
步长为负:从开始下标从后往前获取到字符串结束
str2 = 'abc123abc'
print(str2[4:]) #23abc
print(str2[:]) #获取整个字符串 abc123abc
print(str2[:4:-1]) # cba3
print(str2[::-1]) #字符串倒叙 cba321cba
print(str2[-100:100]) #这里的开始和结束下标都能越界 abc123abc
4.3 字符串相关计算
- +
字符串1 + 字符串2 :拼接两个字符串,产生一个新的字符串
注意:
字符串相加,加号两边必须是字符串
str1 = '成都'
str2 = '理工'
str3 = '大学'
print(str1 + str2 + str3) # 成都理工大学
- *
字符串 * n(正整数) : 字符串内容复制n次,产生一个新的字符串
# 练习打印 10个* 跟10个%
print('*' * 10 + '%' * 10)
- 比较运算符:> < == >= <= !=
a. ==,!=
字符串1 == 字符串2 -- 判断两个字符串是否相等
b. >,<,>=,<=
俩个字符串比较大小:从第一位开始比,找到第一对不同的字符,比较他们编码值的大小。
print('abc' > 'ad') # False 因为 ord(b) < ord(d)
print('1abc' < 'ahkks') # True
# 练习:判断一个字符是否为字母
char1 = input('请输入一个字符:') # c
print('是否是字母:', 'a' <= char1 <= 'z' or 'A' <= char1 <= 'Z') #True
# 练习:判断一个字符是否为中文 4e00 - 9fa5
n = ord(char1) # 97
if 0x4e00 <= n <= 0x9fa5:
print("中文")
else:
print('NO')
if '\u4e00' <= char1 <= '\u9fa5':
print("中文")
else:
print('NO')
- in 和 not in
字符串1 in 字符串2 :判断字符串2中是否包含字符串1,结果是布尔值。
字符串1 not in 字符串2 :判断字符串2中是否不包含字符串1,结果是布尔。
print('abc' in 'abc2432') # True
print('#' in 'ahsjfds#') # True
- len函数
len(序列)
len(字符串) -- 获取字符串中字符的个数。
print(len('abh\u6666ui\n')) # 7
print(len('abh\\u6666ui\n')) # 12
- str
str(数据):将数据转成字符串,转换就是在数据值的最外面加引号
注意:系统数据类型名不能用来给变量命名
1.其他数据转换成字符串:
所有类型的数据都可以转换成字符串
str1 = str(100)
str2 = str({'a': 100, 'b': 200})
print(str1) # '100'
print(str2) # '{'a': 100, 'b': 200}'
2.字符串转其他类型
字符串转整数:
int(字符串),只有去掉引号后剩下的部分本身就是一个整数的字符串才能转换。
字符串转浮点型:
float(字符串),只有去掉引号后剩下的部分本身就是一个整数或浮点数的字符串才能转换。
float('2e3') #2000.0
#只有‘’空串转成bool值才为False,其他都为True。
print(bool('0'), bool('False'), bool('')) # True True False
4.4 格式字符串
- 1.格式字符串
指的是字符串中通过格式占位符来表示字符串变化,然后再通过其他的值来给占位符赋值。
语法:
含有格式占位符的字符串 %(占位符对应的值)
说明:
格式占位符有固定的写法,可以有多个
% -- 固定写法
() -- 里面值的类型和个数要和前面的格式占位符一一对应。
- 2.常见格式占位符
%d -- 整数占位符
%s -- 字符串占位符
%f -- 小数占位符
%.nf -- 小数占位符,保留小数点后n位小数
%c -- 字符占位符,可以将数字转换成字符
name = input('名字:')
message = '%s你好,吃饭了吗?' % name
print(message)
message = '%s今年%d岁,体重:%.2fkg, 血型是:%c' % ('小花', 18, 46.3, 97)
#97 经过%c转换成了字符进行填充
print(message)
4.5 字符串常用方法
- 字符串.capitalize() - 将字符串第一个字母转换成大写
- 字符串对齐
字符串.center(width,fillchar) -- 居中
字符串.ljust(width,fillchar) -- 左对齐
字符串.rjust(width,fillchar) -- 右对齐
width -- 正整数,表示新的字符串的宽度
fillchar -- 字符,填充字符串
str1 = '12hello'
str2 = 'hello'
new_str1 = str1.capitalize()
new_str2 = str2.capitalize()
print(new_str1)
print(new_str2)
str3 = '123'
new_str3 = str3.center(7, '$')
print(new_str3) # 新字符串7个长度,123居中,其余用$填充
new_str3 = str3.ljust(7, '$')
print(new_str3) # 新字符串7个长度,123左对齐,其余用$填充
new_str3 = str3.rjust(7, '$')
print(new_str3) # 新字符串7个长度,123右对齐,其余用$填充
# rjust() 用处
import random
n = random.randint(0, 20) # 产生一个0到100的随机整数
str4 = 'Python1808'
new_str4 = str4 + str(n).rjust(3, '0')
print(new_str4)
- jion(sep)
str1.jion(str2) 用str1插入到str2的每2个字符之间。
- 4.\
max(str1) :求出str1中最大编码的字符
min(str1) :求出str1中最小编码的字符