难点和错误
width = int(input('Please enter width: '))

price_width = 20
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('Pears', 0.5))
print(fmt.format('Cantaloupes', 1.92))
print(fmt.format('Dried Apricots(16 oz.)', 8))
print(fmt.format('Prunes(4 1bs.', 12))

print('=' * width)

有朋友发邮件过来说代码里有两句看不懂:

header_fmt = '{{:{}}}{{:>{}}}'.format(item_width, price_width)
fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)

正常,我看着也发晕

为了少晕点,用实际数字替换掉那些变量:

width = 60

price_width = 20

item_width = 60 - 20 = 40

header_fmt = '{{:{}}}{{:>{}}}'.format(item_width, price_width)

换成'{{:{}}}{{:>{}}}'.format(40, 20),把数字填进占位符的位置:'{{:40}}{{:>20}}'

找到对格式控制的引用语句:

print(header_fmt.format('Item''Price')),替换下:

'{{:40}}{{:>20}}'.foramt('Item', 'Price'),占位符内的数字40制定'Item'占位40个字符,字符串缺省靠左输出,空格补缺;'Price'占位20个字符,缺省靠左输出,符号>指定靠右输出。

两个参数填进两个占位符,在作为整个字符串填进最外层占位符,这样header_fmt的输出就为:

'Item                                    Price'

fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
----> '{{:{}}}{{:>{}.2f}}'.format(40, 20)
----> '{{:40}}{{:>20.2f}}'

print(fmt.format('Apples', 0.4))
----> '{{:40}}{{:>20.2f}}'.format('Apples', 0.4))
'Apples'占位40,靠左;
0.4
占位20,浮点数(f),两位小数点(.2),靠右(>)

两个参数填进两个占位符,在作为整个字符串填进最外层占位符,这样fmt的输出就为:
'Apples                0.40'


这个程序的最后输出是:

Please enter width: 60
============================================================
Item                                                   Price
------------------------------------------------------------
Pears                                                   0.50
Cantaloupes                                             1.92
Dried Apricots(16 oz.)                                  8.00
Prunes(4 1bs.                                          12.00
============================================================