Python中多列数据f-string右对齐失效问题求助
问题修复:f-string实现表格列对齐
你的表格对齐失效,核心原因是表头与内容的对齐方式、列宽度不匹配,以及混用两种格式化方式导致的逻辑冲突。以下是具体修复方案:
问题分析
表头使用旧式
%格式化,内容用f-string,但两者的列对齐规则未统一:- 表头中
%18s对"Starting balance"采用右对齐,但内容里startBalance:<18.2f是左对齐,直接导致该列错位。 - 虽然Year列的宽度和对齐匹配,但其他列的格式化逻辑没有和表头严格对应。
- 表头中
数字列通常建议统一右对齐,更符合阅读习惯,你当前的起始余额列左对齐也会破坏整体表格的视觉一致性。
修复后的完整代码
# 输入数据 startBalance = float(input("Enter the investment amount: ")) years = int(input("Enter the number of years: ")) rate = int(input("Enter the rate as a %: ")) # 转换利率为小数 rate = rate / 100 # 初始化利息累计变量 totalInterest = 0.0 # 使用f-string统一表头格式,与内容对齐规则保持一致 print(f"{'Year':>4}{'Starting balance':>18}{'Interest':>10}{'Ending balance':>16}") # 计算并逐年输出结果 for year in range(1, years + 1): interest = startBalance * rate endBalance = startBalance + interest # 所有数字列统一右对齐,宽度与表头严格匹配 print(f"{year:>4}{startBalance:>18.2f}{interest:>10.2f}{endBalance:>16.2f}") startBalance = endBalance totalInterest += interest # 输出汇总信息 print(f"Ending balance: ${endBalance:.2f}") print(f"Total interest earned: ${totalInterest:.2f}")
关键修改说明
- 表头改用f-string格式化,每列的宽度、对齐方式与内容完全对应:
{'Year':>4}:占4位,右对齐,匹配内容的year:>4{'Starting balance':>18}:占18位,右对齐,匹配内容的startBalance:>18.2f{'Interest':>10}:占10位,右对齐,匹配内容的interest:>10.2f{'Ending balance':>16}:占16位,右对齐,匹配内容的endBalance:>16.2f
- 汇总信息也改用f-string,保持代码风格统一;如果仍习惯旧式
%格式化,也可以保留,但建议统一风格。
内容的提问来源于stack exchange,提问作者Ek'mii U-daidee
相关产品推荐
相关产品推荐

