python格式化字符串输出多行时的对齐问题

python格式化字符串输出多行时,当遇到每一行的内容长短不同时,就会出现对不齐的情况,示例如下,最后输出结果里面,歌曲名这一列的长短不一,导致歌手这一列没有对齐,请问有什么解决办法吗?

a = '{0:^3} {1:*^31} {2:*^20}'.format('序号', '歌曲名', '歌手')
print(a)
music_list = [(1,'就大水电费水电费佛寺丰','sd水电费'), (2,'那大丰','电费'), (1,'就大佛寺那fddfg深粉色gdgdf大丰','sd水fgdgdfg电费')]
m = 0
for i in music_list:
    m += 1
    b = '{0:^3} {1:*^31} {2:*^20}'.format(m, i[1], i[2])
    print(b)

输出结果:

img

引用 皆我百晓生 小程序回复内容作答:
可以使用字符串的ljust()和rjust()方法来对齐输出结果。ljust()方法可以将字符串左对齐,rjust()方法可以将字符串右对齐。

修改代码如下:

a = '{0:^3} {1:*^31} {2:*^20}'.format('序号', '歌曲名', '歌手')
print(a)
music_list = [(1,'就大水电费水电费佛寺丰','sd水电费'), (2,'那大丰','电费'), (1,'就大佛寺那fddfg深粉色gddf大丰','sd水fgdgdf电费')]
m = 0
for i in music_list:
    m += 1
    b = '{0:^3} {1:*^31} {2:*^20}'.format(m, i[1].ljust(31), i[2].rjust(20))
    print(b)

在以上代码中,使用ljust(31)将歌曲名左对齐,并设置宽度为31,使用rjust(20)将歌手右对齐,并设置宽度为20。这样可以保证输出结果对齐。

【以下回答由 GPT 生成】

可以使用str.ljust()和str.rjust()函数来解决字符串输出多行对齐的问题。以下是具体步骤:

  1. 获取每个字段的最大长度,以决定各列的宽度。
  2. 使用str.ljust()和str.rjust()函数对每个字段进行左对齐或右对齐。
  3. 使用字符串连接符将各列连接成完整的一行。

下面是修改后的代码示例:

a = '{0:^3} {1:*^31} {2:*^20}'.format('序号', '歌曲名', '歌手')
print(a)

music_list = [(1, '就大水电费水电费佛寺丰', 'sd水电费'), 
              (2, '那大丰', '电费'), 
              (1, '就大佛寺那fddfg深粉色gdgdf大丰', 'sd水fgdgdfg电费')]

# 获取各字段的最大长度
max_index_length = max(len(str(i[0])) for i in music_list)
max_title_length = max(len(i[1]) for i in music_list)
max_artist_length = max(len(i[2]) for i in music_list)

m = 0
for i in music_list:
    m += 1
    # 左对齐序号
    index_str = str(i[0]).ljust(max_index_length)
    # 右对齐歌曲名
    title_str = i[1].rjust(max_title_length)
    # 右对齐歌手
    artist_str = i[2].rjust(max_artist_length)

    b = '{0:^3} {1:*^31} {2:*^20}'.format(index_str, title_str, artist_str)
    print(b)

这样就能实现输出结果的歌曲名一列对齐,不再导致歌手一列对不齐的问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^