目录:
一、format()
二、格式化操作符:%
三、Python的转义字符及含义
四、课时15课后习题及答案
***************
一、format()
***************
格式化字符串,就是按照统一的规格去输出一个字符串。如果规格不统一,就很有可能造成误会,例如十六进制的10跟十进制的10完全是不同的概念(十六进制的10等于十进制16,二进制10等于十进制2),字符串格式化。正式帮助我们纠正并规范这类问题而存在的。
format()方法接受位置参数和关键字参数(位置参数和关键字参数在函数章节有详细的讲解),二者均传递到一个叫作replacement字段。而这个replacement字段在字符串内由大括号( { } )表示。
>>> "{0} love {1}.{2}".format("I","FishC","com") 'I love FishC.com'
仔细看,字符串中的{0}、{1}和{2}应该跟位置有关,依此被format()的三个参数替换,那么format()的三个参数就叫作位置参数。那什么是关键字参数呢,再来看一个例子:
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com") 'I love FishC.com'
{a}{b}和{c}就相当于三个标签,format()将参数中等值的字符串替换出去,这就是关键字参数啦。另外,也可以综合位置参数和关键字参数一起使用:
>>> "{0} love {b}.{c}".format("I",b="FishC",c="com") 'I love FishC.com'
但是要注意的是,如果把位置参数和关键字参数一起综合起来使用,那么位置参数必须在关键字参数之前,否则就会出错;
>>> "{a} love {b}.{0}".format(a="I",b="FishC","com") SyntaxError: positional argument follows keyword argument
如果把大括号打印出来,你有办法吗?没错,这跟字符串转义字符有点像,只需要用一层大括号包起来即可(要打印转义字符(),只需要转义字符转义本身()):
>>> "{{0}}".format("不打印") '{0}'
位置参数“不打印”没有被输出,这是因为{0}的特殊功能被外层的大括号( { } )剥夺,因此没有字段可以输出。注意,这并不会产生错误哦。最后再来看另外一个例子:
>>> "{0}:{1:.2f}".format("圆周率",3.14159) '圆周率:3.14'
可以看到,位置参数{1}跟平常有些不同,后边多了一个冒号。在替换域中,冒号表示格式化符号开始,“.2”的意思是四舍五入到保留两位小数点,而f的意思是浮点数,所以按照格式化的要求打印除了3.14。
send_str = '''<html><body>
<p>Hi,</p>
<p>附件为{store_full_name}SD-WAN改造方案,包含各设备改造配置方法及改造配置脚本;</p>
<p>以下为{store_full_name}veloCloud Edge激活Key{{转义}}(配置方法请查看方案):</p>
<p><a href="{activkey}">{activkey}</a></p>
<br>祝工作顺利!<br><br>Best Regards,<br>
-----------------------------<br>
京东五星电器 - 信息中心基础架构部<br>
</body></html>'''.format(
store_full_name = "菜鸟教程",
activkey = 2
)
print(send_str)
**************************
二、格式化操作符:%
**************************
刚才讲的是字符串的格式化方法,现在来谈谈字符串所独享的一个操作符:%,有人说,这不是求余数的操作符吗?是的,没错!当%左右均为数字的时候,那么它表示求余数的操作;但当它出现在字符串中的时候,它表示的是格式化操作符。下表列举了Python的格式化符号及含义。
符 号 说 明
% 格式化字符及其ASCII码
% 格式化字符串
% 格式化整数
% 格式化无符号八进制数
% 格式化无符号十六进制数
% 格式化无符号十六进制数(大写)
% 格式化定点数,可指定小数点后的精度
% 用科学计数法格式化定点数
% 根据值的大小决定使用%f或者%e
% 根据值的大小决定使用%F或者%E
答:
符 号 说 明
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化定点数,可指定小数点后的精度
%e 用科学计数法格式化定点数
%g 根据值的大小决定使用%f或者%e
%G 根据值的大小决定使用%F或者%E
下面举几个例子供参考:
>>> '%c'%97 'a' >>> '%c%c%c%c%c'%(70,105,115,104,67) 'FishC' >>> '%d转换为八进制是:%o'%(123,123) '123转换为八进制是:173' >>> '%f用科学计数法表示为:%e'%(149500000,149500000) '149500000.000000用科学计数法表示为:1.495000e+08'
Python还提供了格式化操作符的辅助指令,如下表所示:
符号 说明 m.n m 是显示的最小总宽度,n 是小数点后的位数 - 用于左对齐 + 在正数前面显示加号(+) # 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X' 0 显示的数字前面填充 '0' 取代空格
同样列举几个例子:
>>> '%5.1f'%27.658 ' 27.7' >>> '%.2e'%27.658 '2.77e+01' >>> '%10d'%5 ' 5' >>> '%-10d'%5 '5 ' >>> '%010d'%5 '0000000005' >>> '%#X'%100 '0X64'
**********************************
三、Python的转义字符及含义
**********************************
Python的部分转义字符已经使用一段时间,是时候来给它做个总结了,见下表:
符号 说明 ' 单引号 " 双引号 a 发出系统响铃声 b 退格符 n 换行符 t 横向制表符(TAB) v 纵向制表符 r 回车符 f 换页符 o 八进制数代表的字符 x 十六进制数代表的字符 表示一个空字符 反斜杠
*******************************
四、课时15课后习题及答案
*******************************
0. 根据说明填写相应的字符串格式化符号
符 号 说 明 % 格式化字符及其ASCII码 % 格式化字符串 % 格式化整数 % 格式化无符号八进制数 % 格式化无符号十六进制数 % 格式化无符号十六进制数(大写) % 格式化定点数,可指定小数点后的精度 % 用科学计数法格式化定点数 % 根据值的大小决定使用%f或者%e % 根据值的大小决定使用%F或者%E
1. 请问以下这行代码会打印什么内容?
>>> "{{1}}".format("不打印", "打印")
>>> '{{1}}'.format('不打印','打印')
'{1}'
2. 以下代码中,a, b, c是什么参数?
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
‘I love FishC.com’
答: 关键字参数
3. 以下代码中,{0}, {1}, {2}是什么参数?
>>> "{0} love {1}.{2}".format("I", "FishC", "com") 'I love FishC.com'
答:位置参数
4. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?
''.format('Pi = ', 3.1415)
>>> '{0}{1:.2f}'.format('Pi = ', 3.1415)
'Pi = 3.14'
动动手:
0. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):
我的解法:
user_input = input('请输入一个整数,输入“Q”退出:')
while True:
if user_input == 'Q':
print('您已退出!')
break
elif not user_input.isdigit():
user_input = input('请再次输入一个整数,输入“Q”退出:')
else:
convert_int = int(user_input)
print('%d十进制转16进制为:%#x' % (convert_int, convert_int))
print('%d十进制转8进制为:%#o' % (convert_int,convert_int))
print('%d十进制转2进制为:' % (convert_int),bin(convert_int))
break
运行结果:
请输入一个整数,输入“Q”退出:dsfsdf
请再次输入一个整数,输入“Q”退出:weqwe
请再次输入一个整数,输入“Q”退出:Q
您已退出!
请输入一个整数,输入“Q”退出:sdsdf
请再次输入一个整数,输入“Q”退出:张良
请再次输入一个整数,输入“Q”退出:123
123十进制转16进制为:0x7b
123十进制转8进制为:0o173
123十进制转2进制为: 0b1111011
我的解法:
switch = True
while switch:
print('请输入一个整数,输入“Q”退出:', end='')
user_input = input()
if user_input == 'Q':
print('您已退出!')
break
elif not user_input.isdigit():
continue
else:
convert_int = int(user_input)
print('%d十进制转16进制为:%#x' % (convert_int, convert_int))
print('%d十进制转8进制为:%#o' % (convert_int,convert_int))
print('%d十进制转2进制为:' % (convert_int),bin(convert_int))
运行结果:
请输入一个整数,输入“Q”退出:1sdasd
请输入一个整数,输入“Q”退出:dfdsf
请输入一个整数,输入“Q”退出:dsfgdfg
请输入一个整数,输入“Q”退出:123
123十进制转16进制为:0x7b
123十进制转8进制为:0o173
123十进制转2进制为: 0b1111011
请输入一个整数,输入“Q”退出:345
345十进制转16进制为:0x159
345十进制转8进制为:0o531
345十进制转2进制为: 0b101011001
请输入一个整数,输入“Q”退出:xcxc
请输入一个整数,输入“Q”退出:Q
您已退出!
Process finished with exit code 0
小甲鱼解法:
q = True
while q:
num = input('请输入一个整数(输入Q结束程序):')
if num != 'Q':
num = int(num)
print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))
print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))
print('十进制 -> 二进制 : %d -> ' % num, bin(num))
else:
q = False
运行结果:
请输入一个整数,输入“Q”退出:1sdasd
请输入一个整数,输入“Q”退出:dfdsf
请输入一个整数,输入“Q”退出:dsfgdfg
请输入一个整数,输入“Q”退出:123
123十进制转16进制为:0x7b
123十进制转8进制为:0o173
123十进制转2进制为: 0b1111011
请输入一个整数,输入“Q”退出:345
345十进制转16进制为:0x159
345十进制转8进制为:0o531
345十进制转2进制为: 0b101011001
请输入一个整数,输入“Q”退出:xcxc
请输入一个整数,输入“Q”退出:Q
您已退出!