字符串格式化、运算符、编码、进制对应表
一、字符串格式化
1.1 、%
- 基本格式化操作
%s:字符串格式化
%d:整形格式化(%s其实也可以)
根据位置替换如下:
name = "admin"
# 占位符
text = "我叫%s,今年18岁" %"admin"
#如果是变量,百分号后面跟变量
text = "我叫%s,今年18岁" %name
name = "admin"
age = 18
text = "我叫%s,今年%s岁" %("admin",18)
#如果是变量
text = "我叫%s,今年%s岁" %(name,age)
text = "我叫%s,今年%d岁" %(name,age)
根据名称替换如下:
message = "我叫%(name)s,今年%(age)s岁" % {"name": "admin", "age": "18"}
print(message)
换成变量
text = "我叫%s,今年%d岁"
data1 = text %("admin",18)
data2 = text %("alex",19)
- 百分比
如果字符串里面有百分比,需要特殊处理,如下就会报错,因为百分比也会被需要替换
text = "%s,这个片我已经下载了90%了,居然特么的断网了" %"admin"
print(text)
因此我们要对百分号处理,即多加一个百分号,一旦字符串格式化中存现百分比的显示,请一定要呀加 %% 以实现输出 %。
text = "%s,这个片我已经下载了90%%了,居然特么的断网了" %"admin"
print(text)
1.2 、format,也是最常用的
- 按顺序替换,写上0、1…如果后面还有相同的,可以复用
text = "我叫{0},今年18岁".format("admin")
text = "我叫{0},今年{1}岁".format("admin",18)
text = "我叫{0},今年{1}岁,小名是{0}。".format("admin",18)
如果什么都不写,第一个默认为0,第二个默认为1,但是相同的无法再复用,需要在format里面按顺序写上
text = "我叫{},今年18岁".format("admin")
text = "我叫{},今年{}岁".format("admin",18)
text = "我叫{},今年{}岁,小名是{}。".format("admin",18,"admin")
换成变量
text = "我叫{0},今年{1}岁"
data1 = text.format("admin",18)
data2 = text.format("alex",19)
- 按名称替换,如果后面还有相同的,可以复用
text = "我叫{name},今年18岁".format(name="admin")
text = "我叫{name},今年{age}岁".format(name="admin",age=18)
text = "我叫{name},今年{age}岁,小名是{name}。".format(n1="admin",age=18)
换成变量
text = "我叫{name},今年{age}岁"
data1 = text.format(n1="admin",age=18)
data2 = text.format(n1="alex",age=19)
1.3 、f
到Python3.6之后的版本,更便捷。
action = "跑步"
text = f"嫂子喜欢{action},跑完之后满身大汗"
多变量替换
action = "跑步"
age = 19
text = f"嫂子喜欢{action},今年{age}岁"
print(text)
除此之外,还支持表达式
action = "跑步"
text = f"嫂子喜欢{action},今年{17+2}岁"
print(text)
还支持进制
# 进制转换
v1 = f"嫂子今年{22}岁"
print(v1)
v2 = f"嫂子今年{22:#b}岁"
print(v2)
v3 = f"嫂子今年{22:#o}岁"
print(v3)
v4 = f"嫂子今年{22:#x}岁"
print(v4)
输出
name = "alex"
text = f"嫂子喜欢{name }"
name = "alex"
text = f"嫂子喜欢{name .upper()}"
# 输出:嫂子喜欢ALEX
二、运算符
2.1 、算数运算符
例如:加减乘除,有个特殊的 //
2.2 、赋值运算符
2.3 、成员运算,例如:是否包含
in、not in
v1 = "le" in "alex" # True/False
# 让用户输入一段文本,检测文本中是否包含敏感词。
text = input("请输入内容:")
if "苍老师" in text:
print("少儿不宜")
else:
print(text)
2.4 、运算符优先级
- 算数优先级优先级 大于 比较运算符
if 2 + 10 > 11:
print("真")
else:
print("假")
- 比较运算符优先级 大于 逻辑运算符
if 1>2 and 2<10:
print("成立")
else:
print("不成立")
- 逻辑运算符内部三个优先级 not > and > or
if not 1 and 1>2 or 3 == 8:
print("真")
else:
print("假")
总结:加减乘除 > 比较 > not and or
。
三、进制对应表
四、编码
4.1、unicode
unicode也被称为万国码,为全球的每个文字都分配了一个码位(二进制表示)。
ucs2 用固定的2个字节去表示一个文字。
00000000 00000000 我
...
2**16 = 65535
ucs4 用固定的4个字节去表示一个文字。
00000000 00000000 00000000 00000000 无
...
2**32 = 4294967296
无论是ucs2和ucs4都有缺点:浪费空间
unicode的应用:在文件存储和网络传输时,不会直接使用unicode,而在内存中会unicode。
4.2 utf-8编码
包含所有文字和二进制的对应关系,全球应用最为广泛的一种编码(站在巨人的肩膀上功成名就)。
本质上:utf-8是对unicode的压缩,用尽量少的二进制去与文字进行对应。
unicode码位范围 utf-8
0000 ~ 007F 用1个字节表示
0080 ~ 07FF 用2个字节表示
0800 ~ FFFF 用3个字节表示
10000 ~ 10FFFF 用4个字节表示
具体压缩的流程:
第一步:选择转换模板
码位范围(十六进制) 转换模板
0000 ~ 007F 0XXXXXXX
0080 ~ 07FF 110XXXXX 10XXXXXX
0800 ~ FFFF 1110XXXX 10XXXXXX 10XXXXXX
10000 ~ 10FFFF 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
注意:一般中文都使用第三个模板(3个字节),这也就是平时大家说中文在utf-8中会占3个字节的原因了。
第二步:在模板中填入数据