简介
在编写 Python 程序时,以清晰、有条理的方式呈现输出对于代码可读性和用户体验都至关重要。无论你是在生成报告、显示表格数据,还是仅仅将信息打印到控制台,正确的文本对齐方式都会让你的输出更专业、更易读。
在这个实验中,你将学习在 Python 中对齐和格式化文本输出的各种技术。你将探索不同的对齐方法,练习格式化技巧,并创建结构良好的表格显示,这些技巧可应用于实际的应用程序中。
在编写 Python 程序时,以清晰、有条理的方式呈现输出对于代码可读性和用户体验都至关重要。无论你是在生成报告、显示表格数据,还是仅仅将信息打印到控制台,正确的文本对齐方式都会让你的输出更专业、更易读。
在这个实验中,你将学习在 Python 中对齐和格式化文本输出的各种技术。你将探索不同的对齐方法,练习格式化技巧,并创建结构良好的表格显示,这些技巧可应用于实际的应用程序中。
在第一步中,你将学习 Python 中文本对齐的基本概念,并实现基本的对齐技术。
文本对齐是指文本在给定空间内的位置方式。Python 提供了几种方法来控制文本在打印到控制台时的位置。主要有三种对齐方式:
让我们创建一个简单的 Python 脚本,来演示基本的对齐技术。
在你的 LabEx 环境中打开 WebIDE。
通过点击 WebIDE 中的“New File”图标,在 /home/labex/project 目录下创建一个名为 basic_alignment.py 的新文件。
在文件中添加以下代码:
## basic_alignment.py
print("Basic String Alignment Examples")
print("-" * 30)
## Left alignment example
print("Left alignment:")
print("Python".ljust(20) + "|")
print("Programming".ljust(20) + "|")
print("Alignment".ljust(20) + "|")
print()
## Right alignment example
print("Right alignment:")
print("Python".rjust(20) + "|")
print("Programming".rjust(20) + "|")
print("Alignment".rjust(20) + "|")
print()
## Center alignment example
print("Center alignment:")
print("Python".center(20) + "|")
print("Programming".center(20) + "|")
print("Alignment".center(20) + "|")
按 Ctrl+S 或从菜单中选择“File” > “Save”来保存文件。
如果 WebIDE 中的终端尚未打开,点击“Terminal”菜单并选择“New Terminal”来打开它。
使用 Python 解释器运行脚本:
cd ~/project
python3 basic_alignment.py
Basic String Alignment Examples
------------------------------
Left alignment:
Python |
Programming |
Alignment |
Right alignment:
Python|
Programming|
Alignment|
Center alignment:
Python |
Programming |
Alignment |
你刚刚创建的脚本展示了 Python 中三种基本的字符串对齐方法:
在每个示例中,我们在每行的末尾添加了一个竖线 (|),以清晰显示分配空间的边界。注意在每种情况下,文本的对齐方式不同,但总宽度都保持为 20 个字符。
字符串对齐方法还可以接受第二个参数,用于指定填充字符。让我们修改脚本,看看实际效果。
在 /home/labex/project 目录下创建一个名为 alignment_with_chars.py 的新文件。
在文件中添加以下代码:
## alignment_with_chars.py
print("String Alignment With Custom Characters")
print("-" * 40)
## Using different padding characters
print("Left alignment with dots:")
print("Python".ljust(20, '.') + "|")
print("Programming".ljust(20, '.') + "|")
print()
print("Right alignment with asterisks:")
print("Python".rjust(20, '*') + "|")
print("Programming".rjust(20, '*') + "|")
print()
print("Center alignment with hyphens:")
print("Python".center(20, '-') + "|")
print("Programming".center(20, '-') + "|")
python3 ~/project/alignment_with_chars.py
String Alignment With Custom Characters
----------------------------------------
Left alignment with dots:
Python..............|
Programming.........|
Right alignment with asterisks:
**************Python|
*********Programming|
Center alignment with hyphens:
-------Python------|
----Programming----|
这些示例展示了你如何通过使用不同的填充字符来定制对齐文本的外观。
在之前的步骤中,你学习了使用 ljust(), rjust(), 和 center() 方法的基本字符串对齐。现在,让我们探索 Python 中更强大和灵活的格式化方法。
Python 提供了几种格式化字符串的方法:
% 运算符)str.format() 方法每种方法都提供了一种对齐文本和格式化各种数据类型的方式。让我们逐一探索它们。
这是 Python 中最古老的字符串格式化方法,类似于 C 的 printf() 函数。
/home/labex/project 目录中创建一个名为 old_style_formatting.py 的新文件:## old_style_formatting.py
print("旧式字符串格式化")
print("-" * 30)
## 使用 % 格式化左对齐
print("左对齐:")
print("%-15s | %-10s" % ("Python", "语言"))
print("%-15s | %-10s" % ("JavaScript", "Web"))
print()
## 使用 % 格式化右对齐
print("右对齐:")
print("%15s | %10s" % ("Python", "语言"))
print("%15s | %10s" % ("JavaScript", "Web"))
print()
## 数字格式化
price = 125.5
tax_rate = 0.21
print("数字格式化:")
print("价格:$%8.2f" % price)
print("税率:%6.1f%%" % (tax_rate * 100))
print("税额:$%6.2f" % (price * tax_rate))
print("总价:$%8.2f" % (price * (1 + tax_rate)))
python3 ~/project/old_style_formatting.py
旧式字符串格式化
------------------------------
左对齐:
Python | 语言
JavaScript | Web
右对齐:
Python | 语言
JavaScript | Web
数字格式化:
价格:$ 125.50
税率: 21.0%
税额:$ 26.36
总价:$ 151.86
str.format() 方法str.format() 方法提供了一种更灵活的方式来格式化字符串,旨在解决 % 运算符的一些限制。
/home/labex/project 目录中创建一个名为 format_method.py 的新文件:## format_method.py
print("使用 str.format() 格式化字符串")
print("-" * 35)
## 基本对齐
print("基本对齐:")
print("{:<15} | {:<10}".format("Python", "语言"))
print("{:>15} | {:>10}".format("Python", "语言"))
print("{:^15} | {:^10}".format("Python", "语言"))
print()
## 使用自定义填充字符
print("自定义填充字符:")
print("{:*<15} | {:.>10}".format("Python", "语言"))
print("{:#^15} | {:=^10}".format("Python", "语言"))
print()
## 使用字段名
print("使用字段名:")
print("{name:<15} | {type:<10}".format(name="JavaScript", type="Web"))
print("{name:>15} | {type:>10}".format(name="Python", type="语言"))
print()
## 数字格式化
price = 125.5
tax_rate = 0.21
print("数字格式化:")
print("价格:${:8.2f}".format(price))
print("税率:{:6.1f}%".format(tax_rate * 100))
print("税额:${:6.2f}".format(price * tax_rate))
print("总价:${:8.2f}".format(price * (1 + tax_rate)))
python3 ~/project/format_method.py
使用 str.format() 格式化字符串
-----------------------------------
基本对齐:
Python | 语言
Python | 语言
Python | 语言
自定义填充字符:
Python********* | 语言...
#####Python##### | ==语言==
使用字段名:
JavaScript | Web
Python | 语言
数字格式化:
价格:$ 125.50
税率: 21.0%
税额:$ 26.36
总价:$ 151.86
F-字符串提供了一种简洁方便的方式在字符串字面量中嵌入表达式。它们以字母 'f' 开头,并使用花括号 {} 包含表达式。
/home/labex/project 目录中创建一个名为 f_strings.py 的新文件:## f_strings.py
print("使用 F-字符串格式化字符串")
print("-" * 35)
language = "Python"
category = "语言"
version = 3.10
year = 2022
## 基本对齐
print("基本对齐:")
print(f"{language:<15} | {category:<10}")
print(f"{language:>15} | {category:>10}")
print(f"{language:^15} | {category:^10}")
print()
## 动态宽度指定
width1 = 15
width2 = 10
print("动态宽度:")
print(f"{language:<{width1}} | {category:<{width2}}")
print(f"{language:>{width1}} | {category:>{width2}}")
print()
## F-字符串中的表达式
print("F-字符串中的表达式:")
print(f"{language + ' ' + str(version):<15} | {year - 1991:>10} 年")
print()
## 数字格式化
price = 125.5
tax_rate = 0.21
print("数字格式化:")
print(f"价格:${price:8.2f}")
print(f"税率:{tax_rate * 100:6.1f}%")
print(f"税额:${price * tax_rate:6.2f}")
print(f"总价:${price * (1 + tax_rate):8.2f}")
python3 ~/project/f_strings.py
使用 F-字符串格式化字符串
-----------------------------------
基本对齐:
Python | 语言
Python | 语言
Python | 语言
动态宽度:
Python | 语言
Python | 语言
F-字符串中的表达式:
Python 3.1 | 31 年
数字格式化:
价格:$ 125.50
税率: 21.0%
税额:$ 26.36
总价:$ 151.86
每种格式化方法都有其优势。以下是何时使用每种方法:
str.format() 方法: 比 % 格式化更强大,尤其是在复杂格式化需求时。Python 的现代趋势是尽可能使用 F-字符串,因为它具有更好的可读性和性能优势。
现在你已经学习了不同的对齐技巧,让我们将其应用于创建格式良好的表格。表格是显示结构化数据的常用方法,以便于阅读,正确的对齐对于有效地呈现表格信息至关重要。
让我们从使用固定宽度列创建简单的表格开始。
/home/labex/project 目录中创建一个名为 simple_table.py 的新文件:## simple_table.py
print("简单的固定宽度表格")
print("-" * 50)
## 定义一些数据
header = ["姓名", "年龄", "城市", "职业"]
data = [
["John Smith", 34, "纽约", "医生"],
["Sarah Johnson", 28, "旧金山", "工程师"],
["Michael Brown", 42, "芝加哥", "教师"],
["Emily Davis", 31, "波士顿", "科学家"]
]
## 打印表头
print(f"{header[0]:<20} {header[1]:<8} {header[2]:<15} {header[3]:<15}")
print("-" * 60)
## 打印行
for row in data:
print(f"{row[0]:<20} {row[1]:<8} {row[2]:<15} {row[3]:<15}")
python3 ~/project/simple_table.py
简单的固定宽度表格
--------------------------------------------------
姓名 年龄 城市 职业
------------------------------------------------------------
John Smith 34 纽约 医生
Sarah Johnson 28 旧金山 工程师
Michael Brown 42 芝加哥 教师
Emily Davis 31 波士顿 科学家
不同类型的数据通常在不同的对齐样式下看起来更好。例如,文本通常左对齐,而数字通常右对齐。让我们创建一个更复杂的表格,包含混合对齐方式。
/home/labex/project 目录中创建一个名为 dynamic_table.py 的新文件:## dynamic_table.py
print("混合对齐的动态表格")
print("-" * 50)
## 定义一些数据
header = ["产品", "价格", "数量", "总价"]
products = [
["笔记本电脑", 1299.99, 3, 3899.97],
["鼠标", 24.50, 10, 245.00],
["显示器", 349.95, 2, 699.90],
["键盘", 49.99, 5, 249.95],
["耳机", 89.95, 4, 359.80]
]
## 根据内容计算列宽度
col_widths = [
max(len(str(header[0])), max(len(str(row[0])) for row in products)) + 2,
max(len(str(header[1])), max(len(f"${row[1]:.2f}") for row in products)) + 2,
max(len(str(header[2])), max(len(str(row[2])) for row in products)) + 2,
max(len(str(header[3])), max(len(f"${row[3]:.2f}") for row in products)) + 2
]
## 打印表头
print(f"{header[0]:<{col_widths[0]}}"
f"{header[1]:>{col_widths[1]}}"
f"{header[2]:>{col_widths[2]}}"
f"{header[3]:>{col_widths[3]}}")
print("-" * sum(col_widths))
## 打印带有适当对齐的行
for product in products:
print(f"{product[0]:<{col_widths[0]}}",
f"${product[1]:.2f}".rjust(col_widths[1]),
f"{product[2]}".rjust(col_widths[2]),
f"${product[3]:.2f}".rjust(col_widths[3]))
## 打印汇总
total_quantity = sum(product[2] for product in products)
total_cost = sum(product[3] for product in products)
print("-" * sum(col_widths))
print(f"{'总计':<{col_widths[0]}}",
f"".rjust(col_widths[1]),
f"{total_quantity}".rjust(col_widths[2]),
f"${total_cost:.2f}".rjust(col_widths[3]))
## dynamic_table.py - 修正后的版本
## ... (代码内容与上一个代码块相同)
python3 ~/project/dynamic_table.py
## dynamic_table.py - 简化版本
## ... (代码内容与上一个代码块相同)
python3 ~/project/dynamic_table.py
混合对齐的动态表格
--------------------------------------------------
产品 价格 ($) 数量 总价 ($)
-------------------------------------------------------
笔记本电脑 1299.99 3 3899.97
鼠标 24.50 10 245.00
显示器 349.95 2 699.90
键盘 49.99 5 249.95
耳机 89.95 4 359.80
-------------------------------------------------------
总计 24 5454.62
现在,让我们创建一个更实用的例子——一个使用对齐技术以提高可读性的财务报告。
/home/labex/project 目录中创建一个名为 financial_report.py 的新文件:## financial_report.py
## ... (代码内容与上一个代码块相同)
python3 ~/project/financial_report.py
每月财务报告
============================================================
收入报表
----------------------------------------
项目 金额 ($)
----------------------------------------
工资 5000.00
自由职业工作 1200.50
投资 450.75
其他收入 300.00
----------------------------------------
总收入 6951.25
支出报表
----------------------------------------
类别 金额 ($)
----------------------------------------
租金 1500.00
公用事业 250.30
杂货 600.45
交通 200.00
保险 300.00
娱乐 150.25
储蓄 800.00
杂项 300.00
----------------------------------------
总支出 4101.00
每月总结
----------------------------------------
总收入 6951.25
总支出 4101.00
----------------------------------------
净余额 2850.25
状态:本月节省了 2850.25 美元!
这个例子展示了如何使用正确的对齐方式使复杂的财务信息更容易阅读和理解。
通过这些例子,你已经学习了如何:
这些技能不仅适用于控制台输出,还可以应用于生成报告、创建日志文件或以任何文本格式呈现数据。
在本次实验中,你学习了在 Python 中对齐和格式化文本输出的各种技术:
ljust()、rjust() 和 center()% 运算符、str.format() 和 F 字符串这些文本对齐技能对于在许多应用程序中创建可读的、专业的输出至关重要,从简单的命令行实用工具到复杂的数据处理系统。通过掌握 Python 中的文本对齐,你可以显著提升程序的用户体验和可读性。
在你继续 Python 学习之旅时,请记住,干净、格式良好的输出通常与程序的逻辑同样重要。本次实验中学到的技术将帮助你以既实用又美观的方式呈现数据。