使用python进行输出打印的时候,很多朋友还是使用百分号,但是其实还有一个更简洁的方式,就是字符串的format方法。
基本使用
基本格式如下
'xx{}xx{}'.format(a,b)
一个包含大括号的字符串,通过调用format方法,将传递的参数按顺序分别填充到大括号处。
来看几个例子。
首先定义几个数据
if __name__ == '__main__':
a=[11,13,15,17,19]
b={'name':'xiaofu','age':99,'language':'python'}
c='Hello'
d=234
name='xiaofu'
然后用上面的格式试着打印点东西
print('My name is {}, no. {}'.format(name,d))
结果如下
My name is xiaofu, no. 234
如果传递的参数超过大括号个数,只会传递靠前的
print('My name is {}, no. {}'.format(name,d,c))
打印结果和上面一样。
但是如果传递的参数少于大括号个数,就会报错。
当然,按照顺序去对应有点太麻烦,所以还可以在大括号内用数字指定参数的下标(从0开始)
print('My name is {1}, no. {0}'.format(d, name))
此时的{0}
代表d
,而{1}
代表name
,所以打印结果也同样为
My name is xiaofu, no. 234
并且,同一个下标可以多次引用
print('My name is {1}, no. {0}. call me {1}'.format(d, name))
打印结果为
My name is xiaofu, no. 234. call me xiaofu
除了使用数字代表下标,如果传递的是list等iterable的类型,还可以对传递的参数使用中括号获取指定元素
print('The 2nd item of a is {0[1]}'.format(a))
print('The 2nd item of a is {[1]}'.format(a))
此时的大括号因为一定是代表传递的a
,所以代表a
的下标0
可以省略。上面两种方式打印的结果都是
The 2nd item of a is 13
对字典类型还可以通过中括号获取指定key对应的value
print('Age is {0[age]}'.format(b))
print('Age is {[age]}'.format(b))
同样这里直到b
的0
也可以省略,最后的结果都是
Age is 99
数字格式化
单纯用大括号去替代后面传递的参数只是format的其中一个功能,对传递的数字进行格式化也同样在行。
还是先准备一些数据
a=3.1415926
b=23456
c=11
d='22'
数字格式化在大括号内以:
开始,紧接数据的一些操作,例如对齐,限制小数点位数,补0等等,最后是数据的类型。
其中数据类型如下
符号 | 数据类型 |
---|---|
b | 二进制整数 |
d | 十进制整数 |
o | 八进制整数 |
x | 十六进制整数 |
% | 百分制 |
e | 指数记法 |
例如
print('{:%}'.format(a)) # 314.159260%
print('{:f}'.format(b)) # 23456.000000
print('{:e}'.format(c)) # 1.100000e+01
注意,整型转浮点型是可以直接转的,但是其余的类型不匹配会报错。例如下面这两句就都会报错
print('{:d}'.format(a))
print('{:d}'.format(d))
然后是一些操作。
限制小数点位数
格式如下,这里的n就是保留的位数,如果是0就只保留整数部分
{:.nf}
例如
print('{:.3f}'.format(a)) # 3.142
print('{:.5f}'.format(a)) # 3.14159
print('{:.0f}'.format(a)) # 3
注意这里还进行了四舍五入。
对齐
左对齐为
{:<nd}
右对齐为
{:>nd}
中间对齐为
{:^nd}
其中的n为总的位数,位数不够默认用空格填充,n小于数字的位数就原样输出
print('{:>3d}'.format(b))
print('{:>8d}'.format(b))
print('{:<5d}'.format(c))
print('{:>5d}'.format(c))
print('{:>15f}'.format(a))
print('{:^8d}'.format(b))
输出结果为
23456
23456
11
11
3.141593
23456
如果不想用空格填充就在冒号后面加入用来填充的符号
print('{:>3d}'.format(b))
print('{:0>8d}'.format(b))
print('{:-<5d}'.format(c))
print('{:$>5d}'.format(c))
print('{:0>15f}'.format(a))
print('{:-^8d}'.format(b))
输出结果为
23456
00023456
11---
$$$11
00000003.141593
-23456--
具体实例
下面用一个具体实例来练练手。
题目
输入两个正整数lower和upper(lower<=upper<=100),请输出一张取值范围为[lower,upper]且每次增加两华氏摄氏度的华氏-摄氏温度转换表。温度转换的计算公式C=5x(F-32)/9
,其中C表示摄氏温度,F表示华氏温度。
输入格式
在一行中输入2个整数,中间用空格分开
输出格式
第一行输出“fahr celsius”
接着每行输出一个华氏维度与一个摄氏温度,摄氏温度占据6个字符宽,保留到小数点后1位,靠右对齐。若输入的范围不合法,则输出“Invalid”
解答
if __name__ == '__main__':
l,u=map(int,input().split())
if l>u:
print('Invalid')
else:
print('fahr celsius')
for i in range(l,u+1,2):
print('{}{:>6.1f}'.format(i,(5*(i-32)/9)))
输出样例
32 40
fahr celsius
32 0.0
34 1.1
36 2.2
38 3.3
40 4.4
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。