Python中如何设置模字符串格式化的最大宽度以对齐输出?
如何用模字符串格式化实现对齐的菜单输出?
你当前的问题出在格式化字符串的结构上:"%d. %s $%20.2f" 把$和价格分开,还给价格设置了20字符的左对齐最小宽度,导致价格被推到右侧,同时商品描述没有固定宽度,整体排版混乱。
要实现你期望的对齐效果,需要调整两个关键点:
- 给商品描述设置固定宽度的左对齐格式,让所有描述占满相同宽度,自动补空格
- 把
$和价格放在一起,不需要给价格设置过大的最小宽度
修改后的代码如下:
print("%d. %-20s $%.2f" % (count, i.description, i.price))
格式说明:
%-20s:-指定左对齐,20设置宽度为20字符。商品描述会左对齐显示,长度不足20时自动在右侧补空格,超过20时会完整显示(如果需要限制最大长度,可以用%.20s,会截断超出部分)$%.2f:直接紧跟在描述的空格后,%.2f保证价格保留两位小数,不需要额外设置宽度,自然对齐到同一列
对于最后一行Cancel Purchased Item,如果是在同一个循环里处理,可以加个判断:
if hasattr(i, 'price'): print("%d. %-20s $%.2f" % (count, i.description, i.price)) else: print("%d. %s" % (count, i.description))
调整后输出就会和你期望的一致:
Menu --------------------------------- 1. Pants $19.99 2. Shirt $12.50 3. Dress $79.00 4. Socks $1.00 5. Sweater $49.99 6. Cancel Purchased Item
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

