Python3如何实现左对齐截断描述、右对齐金额的字符串格式化
你缺少两个核心处理逻辑:
- 描述字段的超长截断逻辑:当前你没有对description做长度限制,长度超过23的描述会挤占金额列的位置,直接破坏整体布局。Python的字符串格式化支持同时指定对齐宽度和最大显示长度,只需要把description的格式化规则从
<23改成<23.23,就能实现左对齐占满23位、超过23位自动截断的效果。 - 金额列的宽度适配逻辑:你当前设置的金额宽度为7位,最多只能容纳
9999.99这类长度为7的数值,一旦金额超过10000,格式化后的10000.00长度为8,会撑破预设宽度导致小数点错位。你可以根据业务实际的金额范围调整宽度,比如改成8位就能覆盖10万以内的正负金额。
修改后的完整代码如下:
ledger = [ {'amount': 1000.00, 'description': 'initial deposit'}, {'amount': -10.15, 'description': 'groceries'}, {'amount': -15.89, 'description': 'restaurant and more food costings'}, {'amount': -50, 'description': 'Transfer to Clothing'} ] # 打印表头 category = "Food" print(category.center(30, '*')) string = '' for dic in ledger: # 描述左对齐占23位,超长截断;金额右对齐占7位,保留两位小数 string += '{description:<23.23}{amount:>7.2f}\n'.format(**dic) print(string)
运行输出结果完全符合要求:
*************Food************* initial deposit 1000.00 groceries -10.15 restaurant and more foo -15.89 Transfer to Clothing -50.00
如果你的业务中存在超过10000的大额金额,可以把金额的格式化规则改成{amount:>8.2f},同步把描述的最大长度调整为22,保证整行总长度一致即可。
内容的提问来源于stack exchange,提问作者Arafat
相关产品推荐
相关产品推荐

