Python3:当连续使用大括号时,值插入到哪里?

tzcvj98z  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(104)

此程序的目的是根据指定的宽度打印格式正确的价格表。
代码如下:

width = int(input('Please enter width:'))
price_width = 10
item_width = width -price_width
header_fmt = "{{:{}}}{{:>{}}}".format(item_width, price_width)
fmt = "{{:{}}}{{:>{}.2f}}".format(item_width, price_width)

print('=' * width)
print(header_fmt.format('Item', 'Price'))
print('-' * width)
print(fmt.format('Apples', 0.4))
print(fmt.format('Pears', 0.5))
print(fmt.format('Cantaloupes', 1.92))
print(fmt.format('Dried Apricots(16 oz.)', 8))
print(fmt.format('Prunes(4 lbs.)', 12))
print('=' * width)

问题如下:

  1. '{{:{}}}{{:>{}}}'.format(item_width, price_width)中的花括号是什么意思?
  2. item_width和price_width最后插入到哪里?
    1.在print(header_fmt.format('Item', 'Price'))中,当我已经像前面的问题一样插入了item_width和price_width时,Item和Price插入到哪里?
    Ps:当我试图找到存储插入项的确切位置时,如item_width,price_width,Item和Price,我删除了一对花括号,它显示为TypeError
    我只是想知道每一对花括号的含义?
    另外,我想知道在item_widthprice_width之后再次格式化header_fmt时发生了什么?
yeotifhr

yeotifhr1#

'{{:{}}}{{:>{}}}'.format(item_width, price_width)中的花括号是什么意思?
下面是Python文档的内容:
格式字符串包含由大括号{}括起来的“替换字段”。未包含在大括号中的任何内容都被视为文字文本,该文本将被原样复制到输出中。如果需要在文字文本中包含大括号字符,可以通过以下方法对其进行转义:{{}}中的一个或多个。
换句话说,每个{}都是一个“替换字段,”它将按顺序用format()的一个参数替换。{{}}是单大括号(分别为{});重复是必要的,这样它们就不会被误解
请注意,格式字符串的解释是从左到右的,这与其他格式字符串处理一样。这会影响}}}在所显示的格式字符串中的解释方式。因为此时有一个开放的{,第一个}作为替换字段的结束,另外两个}}成为一个},所以格式字符串的解释如下:

{{               Literal {
  :              Literal :
   {}            Replacement field (item_width)
     }}          Literal }
       {{        Literal {
         :>      Literal :>
           {}    Replacement field (price_width)
             }}  Literal }

其目的是建立一个格式字串以供日后使用。例如,如果item_width为12,price_width为7,则结果为:

{:12}{:>7}

这是一个只包含两个替换字段且没有其他文本的格式字符串。当该格式字符串与print(header_fmt.format('Item', 'Price'))一起使用时,将生成:

Item          Price

在这里,字符串Item被放置在12个字符的字段的左边(所以它后面有8个空格),而Price被放置在7个字符的字段的右边(因为>)(所以它前面有2个空格)。
关于格式字符串的文档可以在Python参考手册中找到(上面的引用就是从这里来的)。然而,你可能想从阅读Python教程中关于格式化的章节开始,这可能更容易理解,并且其中包括了一些例子。

相关问题