大爽Python入门教程 5-2 格式化输出

大爽Python入门公开课教案 点击查看教程总目录

虽然之前我写过一篇文章:
python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇

其中详细讨论过输入输出,但是讲的过于细致,对于新手来讲过于繁琐,很多地方用不到。
这里做了一定的简化,只针对具体的一部分功能来讲实现方法。

以下均使用占位符实现,
三种占位符%sformatf string都会展示。
大家掌握自己最熟悉的一种即可,不然容易混乱。

1 按精度输出小数float

比如3.1415

>>> pi = 3.1415

保留三位小数输出

>>> "%.3f" % pi
'3.142'
>>> "{:.3f}".format(pi)
'3.142'
>>> f"{pi:.3f}"
'3.142'

保留2位小数输出, 如下

>>> "%.2f" % pi
'3.14'
>>> "{:.2f}".format(pi)
'3.14'
>>> f"{pi:.2f}"
'3.14'

说明

  • f是输出浮点数的格式
  • .2.3 表示精度,点.后面接精度
  • formatf表达式,此时都要在之前有个冒号:

2 对齐

场景

比如有个学生的成绩信息如下

scores = {
    "math": 80,
    "history": 70,
    "chemistry": 75
}

希望按以下格式输出

math      : 80
history   : 70
chemistry : 75

%s实现

代码如下

for course in scores:
    score = scores[course]
    print("%-10s: %s" %(course, score))

%-10s

  • 10 是设置宽度为10
  • %s 默认右对齐
  • -10-是设置左对齐

format实现

代码如下

for course in scores:
    score = scores[course]
    print("{:10s}: {}".format(course, score))

{:10s}

  • s 是设置输出类型为字符串
  • 10 是设置宽度为10
  • format 绝大多数对象默认左对齐(数字对象默认右对齐)。

设置对其方式为

  • <: 强制左对齐
  • >: 强制右对齐
  • ^: 强制居中对齐

使用示例

>>> name = "jack"
>>> "{:<10s}".format(name)
'jack      '
>>> "{:^10s}".format(name)
'   jack   '
>>> "{:>10s}".format(name)
'      jack'

f string实现

代码如下

for course in scores:
    score = scores[course]
    print(f"{course:10s}: {score}")

f表达式的里面的设置语法和format差不多。

>>> name = "jack"
>>> f"{name:<10s}"
'jack      '
>>> f"{name:^10s}"
'   jack   '
>>> f"{name:>10s}"
'      jack'

3 填充

对齐时,一般会自动使用空格作为填充,
如果不想用空格,用其他字符填充,语法为:
:和对齐符号(此时必须要有对齐符号)之间指定。
注:%s好像不支持灵活的填充

示例如下

>>> name = "jack"
>>> "{:-<10s}".format(name)  # 指定用-来填充
'jack------'
>>> "{:-^10s}".format(name)
'---jack---'
>>> "{:->10s}".format(name)
'------jack'
>>> f"{name:-<10s}"
'jack------'
>>> f"{name:=<10s}"  # 指定用=来填充
'jack======'

4 综合

混合使用注意次序:

  • 填充设置在:和对齐符号之间。
  • 精度设置在对其数字之后。

示例如下

>>> pi = 3.1415
>>> "{:0>10.2f}".format(pi)
'0000003.14'
>>> f"{pi:0>10.2f}"
'0000003.14'

:0>10.2f

  • 0是填充符
  • >是右对齐(靠右)
  • .2f 是精度设置为保留两位小数
posted @ 2021-11-23 18:15  大爽歌python编程辅导  阅读(138)  评论(0编辑  收藏  举报