python利用format进行格式化打印

使用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))

同样这里直到b0也可以省略,最后的结果都是

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上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值