Python使用\t制表符格式化输出时内容错位问题咨询
对齐错位问题根本原因
制表符\t的核心作用是将光标移动到下一个制表位,绝大多数终端、代码编辑器的默认制表位间隔为8个字符。它不会固定插入8个空格,而是根据当前光标所在的位置,补对应数量的空格跳到下一个8字符倍数的位置,这就是格式代码完全一致但输出错位的核心原因。
对应你的三个输出项具体计算逻辑如下:
- 开头的第一个
\t会统一把光标定位到第8个字符的位置 - 第一个商品名
Books长度为5,输出后光标停在8 + 5 = 13位,下一个制表位是第16位,所以第一个后续\t补3个空格跳到16位,第二个\t再跳到下一个制表位24位后输出价格 - 第二个商品名
Computer长度为8,输出后光标刚好停在8 + 8 = 16位,正好卡在制表位上,所以第一个后续\t直接跳到24位,第二个\t再跳到32位后输出价格,自然就比另外两个的价格多偏移了8个字符的位置,看起来就像多了一个\t - 第三个商品名
Monitor长度为7,输出后光标停在8 + 7 = 15位,和第一个商品逻辑一致,最终价格也和第一个商品对齐
更稳定的对齐方案
不要依赖制表符做对齐,直接使用字符串格式化的固定宽度占位符实现稳定对齐,示例代码如下:
# 给商品名预留16个字符的左对齐宽度,不需要再用\t控制间距 print("\t{:<16}${}".format(p1_name.title(), p1_price)) print("\t{:<16}${}".format(p2_name.title(), p2_price)) print("\t{:<16}${}".format(p3_name.title(), p3_price))
{:<16}表示对应变量左对齐,占满16个字符的宽度,不足的部分自动补空格,不管商品名长度是多少,后面的价格都会从固定位置开始输出,不会出现错位问题。
内容的提问来源于stack exchange,提问作者Ronaldo Moura
相关产品推荐
相关产品推荐

