如何左对齐和分隔此print语句中某些值的输出?

2024-04-27 13:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有以下代码,生成如下所示的输出:

MENU = [["Hawaiian", 8.50], ["Pepperoni", 8.50], ["Veg Trio", 8.50], ["Simply Cheese", 8.50], ["Meat Lovers", 8.50], ["Ham & Cheese", 8.50], ["BBQ Italian Sausage", 8.50],
    ["Loaded Supreme", 13.50], ["Chicken Fajita", 13.50], ["Apricot Chicken", 13.50], ["Garlic Prawn", 13.50], ["Chicken Cranberry", 13.50]]

print("\nWe sell the following pizzas.")
for i, pizza in enumerate(MENU):
    print("{}: {}: ${:.2f}".format(str(i+1).zfill(2), MENU[i][0], MENU[i][1]))

输出:

Output of this code

如何使所有的价格都在各自的“列”中,并且左对齐?我已经尝试了一些方法来回答类似的问题,但我不能达到我想达到的目的。你知道吗

我尝试过使用我在这里找到的方法,但它们所做的只是将冒号和价格之间的差距扩大到每个单独列的相同数量,这当然不会使它们全部对齐。你知道吗

我只是在学习,所以任何帮助都将不胜感激!你知道吗


Tags: 方法代码trio价格menusimplyhamprint
3条回答

你可以做一些改变来简化一些事情。你知道吗

使用与@Igle类似的方法,找到最大长度可能是最好的方法,但使用内置填充而不是手动添加空格更为清晰。你知道吗

Python 3.6之前的版本

MENU = [["Hawaiian", 8.50],
        ["Pepperoni", 8.50],
        ["Veg Trio", 8.50],
        ["Simply Cheese", 8.50],
        ["Meat Lovers", 8.50],
        ["Ham & Cheese", 8.50],
        ["BBQ Italian Sausage", 8.50],
        ["Loaded Supreme", 13.50],
        ["Chicken Fajita", 13.50],
        ["Apricot Chicken", 13.50],
        ["Garlic Prawn", 13.50],
        ["Chicken Cranberry", 13.50]
    ]

print("\nWe sell the following pizzas.")

# Add 2 is optional but it makes the column a bit clearer.
mlen = max(len(p[0]) for p in MENU) + 2

for i, pizza in enumerate(MENU, 1): # Include the 1 to remove the +1 in the rest of the code
    print("{{:02d}}: {{:<{}}} ${{:>5.2f}}"
            .format(mlen) # Use multiple formats so that the padding is dynamic
            .format(i, pizza[0]+':', pizza[1]) # Use pizza rather than MENU[i]
    )

对于使用fstrings的Python3.6,一切都变得简单了,因为您可以直接添加动态格式,而不是使用两个步骤

# ... same set up as above
for i, pizza in enumerate(MENU, 1):
    print(f"{i:02d}: {pizza[0]+':':<{mlen}} ${pizza[1]:>5.2f}")

您可以查找名称最长的比萨饼,然后在名称和价格之间为较短的名称填充空格:

MENU = [["Hawaiian", 8.50], ["Pepperoni", 8.50], ["Veg Trio", 8.50], ["Simply Cheese", 8.50], ["Meat Lovers", 8.50], ["Ham & Cheese", 8.50], ["BBQ Italian Sausage", 8.50],
    ["Loaded Supreme", 13.50], ["Chicken Fajita", 13.50], ["Apricot Chicken", 13.50], ["Garlic Prawn", 13.50], ["Chicken Cranberry", 13.50]]

# Get a list of the lengths of the pizza names
menu_name_lengths = [len(k[0]) for k in MENU]

# Get the length of the longest name
max_length = max(menu_name_lengths)

# (max_length-len(pizza[0])) gives the number of spaces to fill in the gap
for i, pizza in enumerate(MENU):
    print("{} {}:{} ${:.2f}".format(str(i+1).zfill(2), pizza[0], " "*(max_length-len(pizza[0])), pizza[1]))

打印输出:

01 Hawaiian:            $8.50
02 Pepperoni:           $8.50
03 Veg Trio:            $8.50
04 Simply Cheese:       $8.50
05 Meat Lovers:         $8.50
06 Ham & Cheese:        $8.50
07 BBQ Italian Sausage: $8.50
08 Loaded Supreme:      $13.50
09 Chicken Fajita:      $13.50
10 Apricot Chicken:     $13.50
11 Garlic Prawn:        $13.50
12 Chicken Cranberry:   $13.50

您可以使用str.format来选择行中每个元素之间的间距,这将创建您要查找的列。{:>15}表示将字符串显示在右边15个空格处。不过,右边的列仍然不会对齐,但我正在为此制定解决方案,一旦找到答案,我将对其进行编辑,但您可以在meatime中尝试此操作。你知道吗

MENU = [["Hawaiian", 8.50], ["Pepperoni", 8.50], ["Veg Trio", 8.50], ["Simply Cheese", 8.50], ["Meat Lovers", 8.50], ["Ham & Cheese", 8.50], ["BBQ Italian Sausage", 8.50],
    ["Loaded Supreme", 13.50], ["Chicken Fajita", 13.50], ["Apricot Chicken", 13.50], ["Garlic Prawn", 13.50], ["Chicken Cranberry", 13.50]]

print("\nWe sell the following pizzas.")
for i, pizza in enumerate(MENU):
    line = '{:>12}  {:>5}  {:>15}'.format(str(i+1).zfill(2), MENU[i][0], MENU[i][1])
    print(line)

相关问题 更多 >