之前讲到使用format方法可以让待格式化的值左侧或右侧补空格,不过这种填充空格的效果看上去比较难看,而且一般的用户也分不清楚前面或后面到底有多少个空格。所以最合适的方式就是在值的前面或后面补0。要实现这个功能,就需要使用{chapter:02.0f}来格式化了。其中,chapter是格式化参数,第1个0表示位数不足时前面要补0;2表示整数部分是2位数字;第2个0表示小数部分被忽略;f表示以浮点数形式格式化chapter指定的值。
print('第{chapter:02.0f}章'.format(chapter=4)) #输出结果:第04章如果想用format方法控制值的左、中、右对齐,则可以分别使用"<"、"^“和”>"。
print('{:<10.2f}\n{:^10.2f}\n{:>10.2f}'.format(1,2,3)) #分别让1、2、3左对齐、中对齐、右对齐方式显示 #输出结果: # 1.00 # 2.00 # 3.00不管是哪种方式对齐(左、中、右),在很多情况下,值的总长度要比指定宽度小,在默认情况下,不足的位要补空格,但也可以通过在"<"、"^“和”>"前面加符号,让这些不足的位用这些符号替代空格补齐。
print('{:*^20}'.format('星号')) #"星号"在宽度为20的区域内中心对齐,并左右两侧添加若干个星号(*),两侧各添加9个星号(*) #输出结果:*********星号*********对于需要在前面显示负号的数值,如-3、-5.可以通过在等号(=)前面加上字符,以便在负号和数值之间加上特殊符号。
print('{0:>=10.2f}'.format(-8.88)) #在8.88和负号之间显示">",输出结果:->>>>>8.88最后在说以下数值转换,如果将十进制分别转换为二进制、八进制和十六进制的数,需要分别使用"b"、"o"和"x"类型符。
print('{:b}'.format(45)) #转换为二进制,输出结果:101101 print('{:o}'.format(45)) #转换为八进制,输出结果:55 print('{:x}'.format(45)) #转换为十六进制,输出结果:2d[例 5.8] 本例通过控制台输入了位数等数值,通过format方法完成补0、对齐、填充字符、进制转换等操作。
#从math模块导入pi from math import pi #让圆周率pi保留小数点后3位数,并在长度为12的区域输出,前面补0 print('{pi:012.3f}'.format(pi=pi)) #输出结果:00000003.142 #输入一个数值,表示章节的位数,假设本例输入的是3 numStr = input('请输入章节序号的位数:') #将输入的字符串转换为整数 number = int(numStr) #格式化输出章节序号,其中章的序号宽度使用了用户输入的值,节的宽度使用了3 print('第{:0{number}.0f}章,第{:03.0f}节'.format(1,2,number=number)) #输出结果:第001章,第002节 #以左对齐、中对齐和右对齐方式在宽度为10的区域显示圆周率pi,不足位补空格 print('{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}'.format(pi)) #输出结果: # 3.14 # 3.14 # 3.14 #在宽度为20的区域居中显示'人民币',并在'人民币'两侧显示'¥' print('{:¥^20}'.format('人民币')) #输出结果:¥¥¥¥¥¥¥¥人民币¥¥¥¥¥¥¥¥¥ #在宽度为20的区域左侧显示'人民币',并在'人民币'右侧显示'¥' print('{:¥<20}'.format('人民币')) #输出结果:人民币¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ #在宽度为20的区域右侧显示'人民币',并在'人民币'左侧显示'¥' print('{:¥>20}'.format('人民币')) #输出结果:¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥人民币 #在宽度为10区域显示圆周率pi的负数形式,并保留小数点后2位数 print('{0:=10.2f}'.format(-pi)) #通过等号(=)设置了负号(-)和pi直接显示的字符,默认是空格 #输出结果:- 3.14 #输入一个负号,该负号会填充负号(-)和pi之间的区域,假设本例输入的是'*' sign = input('请输入在数值前面输出的符号:') #通过等号(=)设置在负号和pi之间填充的符号 print('{0:{sign}=10.2f}'.format(-pi,sign=sign)) #输出结果:-*****3.14 #输入一个十进制整数,假设本例输入的是20 numStr = input('请输入要转换为二进制和十六进制的数') #将输入的字符串转换为整数 num = int(numStr) print('{:b}'.format(num)) #输出结果:10100 #将十进制整数转换为二进制数,前面加'0b' print('{:#b}'.format(num)) #输出结果:0b10100 #将十进制整数转换为十六进制数 print('{:x}'.format(num)) #输出结果:14 #将十进制整数转换为十六进制数,前面加'0x' print('{:#x}'.format(num)) #输出结果:0x14输出结果:
00000003.142 请输入章节序号的位数:3 第001章,第002节 3.14 3.14 3.14 ¥¥¥¥¥¥¥¥人民币¥¥¥¥¥¥¥¥¥ 人民币¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥人民币 - 3.14 请输入在数值前面输出的符号:* -*****3.14 请输入要转换为二进制和十六进制的数20 10100 0b10100 14 0x14使用等号(=)在负号和数值之间填充字符时要注意,要填充的字符一定要在等号前面,不能放到等号后面,否则可能会抛出异常,会变成别的含义。
如果在指定字符串格式化类型符时的某些值本身是变量,例如,{0:=^10.2f}中的10是变量,需要去width变量的值。那么可以使用嵌套的写法:{0:={width}.2f}。