Python基础 : 字符串格式化输出
一、知识点详解
1.1 f-string(推荐)
基础用法:
name = "小王"
age = 25
print(f"{name}今年{age}岁了.") # 小王今年25岁了.
支持表达式:
print(f"10年后年龄:{age + 10}") # 10年后年龄:35
格式控制符:
符号 | 功能 | 示例 | 输出 | 说明 |
---|---|---|---|---|
:<n | 左对齐(宽度n) | f"{'Hi':<5}" | Hi | HI后补3个空格 |
:>n | 右对齐(宽度n) | f"{3.14:>7}" | 3.14 | 前补3个空格 |
:^n | 居中对齐(宽度n) | f"{'OK':^5}" | OK | 左右分别补1、2个空格 |
:.nf | 保留n位小数 | f"{3.1415926:.2f}" | 3.14 | 四舍五入保留两位小数 |
:, | 千位分隔符 | f"{123456789:,}" | 123,456,789 | 每三位用逗号分隔 |
:.n% | 百分比格式化 | f"{0.66666:.2%}" | 66.67% | 转换为百分比并保留两位 |
使用说明
1.对齐方式
- 左对齐用
<
,右对齐用>
,居中对齐用^
,后接宽度值,参考上表
2.填充字符
- 在对齐符号前添加填充字符(默认为空格),例如
~
或*
print(f"{'text':~<10}")
# 左对齐,宽度为10,不足部分用~填充
# 输出:text~~~~~~
print(f"{'text':*^10}")
# 居中对齐,宽度为10,两侧用*填充
# 输出:***text***
3.组合使用
- 格式为[
填充字符
][对齐符号
][宽度
],例如:f"{'text':@>10}"
表示右对齐,宽度10,左侧用@
填充
print(f"{'text':@>10}")
# 右对齐,宽度10,左侧用@填充
# 输出:@@@@@@text
注意事项 :
- 填充字符限制:只能使用单个字符(如
*
、-
),多字符会报错。 - 数据长度超宽:若数据长度超过指定宽度,按原样输出(不截断)。
- 支持表达式 : 格式说明符内可嵌入变量或表达式 。
symbol = "#"
print(f"{'text':{symbol}^10}")
# 输出:###text###
1.2 format()方法
位置参数与关键字参数:
print("{}的{}售价是¥{:.1f}".format("超市", "苹果", 6.5)) # 超市的苹果售价是¥6.5
print("{shop}的{fruit}售价是¥{price:.1f}".format(shop="超市", fruit="苹果", price=6.5))
格式控制符(与f-string类似):
print("{0:*^10}".format("VIP")) # 输出: ***VIP***
1.3 %格式化(传统方法,了解即可)
- 占位符类型:
占位符 | 类型 | 示例 | 输出 |
---|---|---|---|
%s | 字符串 | "Name: %s" % "小美" | "Name: 小美" |
%d | 整数 | "Age: %d" % 25 | "Age: 25" |
%f | 浮点数 | "Price: %.2f" % 3.1415 | "Price: 3.14" |
print("日期:%d-%02d-%02d" % (2024, 3, 5)) # 日期:2024-03-05(02d表示补零到2位)
二、说明示例
2.1 商品价格表对齐
products = [("A001", "笔记本", 15.5), ("A002", "钢笔", 8.0)]
print(f"{'商品代码':<10}{'名称':<10}{'价格':>10}")
print("-" * 30)
for code, name, price in products:
print(f"{code:<10}{name[:4]:<10}¥{price:>7.2f}")
# 输出:
# 商品代码 名称 价格
# ------------------------------
# A001 笔记本 ¥ 15.50
# A002 钢笔 ¥ 8.00
2.2 动态生成报告
# 用户输入数据
title = input("报告标题:")
author = input("作者:")
content = input("内容摘要:")
# 使用format()生成模板
report = """
{title_line}
{title:^30}
{title_line}
作者:{author}
内容:
{content}
""".format(
title_line="=" * 30,
title=title.upper(),
author=author,
content=content
)
print(report)
三、知识点总结
- f-string(推荐):
- 简洁直观,通过
{}
插入变量或表达式,支持对齐、填充、小数保留、千位分隔符、百分比等格式控制,填充字符需为单个字符,数据超宽时原样输出。
- format()方法:
- 可通过位置参数或关键字参数格式化字符串,格式控制符与f-string类似,适用于动态参数或需要复用模板的场景。
- %格式化(传统方法):
- 使用占位符(如
%s
、%d
、%f
)进行格式化,需注意占位符类型与数据匹配,目前较少推荐,以了解为主。
- 格式控制通用规则:
- 对齐符号(
<
左对齐、>
右对齐、^
居中)后接宽度,可在对齐符号前添加单个填充字符,数字格式化支持千位分隔符(,
)和百分比(%.n%
)等。
四、扩展知识
1.多行f-string:直接在三引号字符串中使用{}
插入变量,方便生成多行文本。
name = "小美"
message = f"""
亲爱的{name}:
您的订单已发货。
"""
print(message)
2.格式规范迷你语言:通过动态指定格式字符串(如>{width},{.nf}
)灵活控制输出格式。
value = 12345.6789
spec = ">20,.2f" # 右对齐宽度20,千位分隔符,保留2位小数
print(f"数值:{value:{spec}}") # 输出:数值: 12,345.68
五、知识点考察题
x = 'a1'
s = f"x is {x} "
s = s.upper()
s.strip()
a1 = s + '?'
print(a1)
上面代码输出结果为( )
- A.
X IS a1?
- B.
X IS A1 ?
- C.
X IS a1 ?
- D.
XISA1?