Python 3 嵌套字符串格式

Python 3 Nesting String format

我正在尝试生成一个带有数字的简单三角形,输出可能如下所示:

  1
 22
333

但是,我不能让它与嵌套字符串格式一起使用,我能实现的最好结果如下...

        for i in range(1, size+1):    
            line = f'{i}' *i
            print(f"{line:>{size}}")

理想情况下,我希望 'line' 嵌套在 print 方法中。有什么建议吗?

您的 "nested" 格式字符串需要格式化两次。第二次要保留的任何花括号都需要在第一次进行转义,因此 { 变为 {{} 变为 }}。此外,由于您不能使用 f 前缀两次,您可以显式调用 format 进行第二次格式化。

你要找的是这个:

for i in range(1, size + 1):
    line = f"{i}" * i
    print(f"{{0:>{size}}}".format(line))

所以第一个字符串格式化将 f"{{0:>{size}}}" 变成 {0:>3},因此当到达 format 的显式调用时,你基本上得到 print("{0:>3}".format(line)).

实际上,如果您想要将创建的“线”嵌入到 f 弦本身中,您可以通过以下方式实现:

for i in range(1, size+1):
    print(f"{str(i) * i:>{size}}")

或者,如果需要,您也可以在其中使用旧的 % 运算符形成一个字符串。

for i in range(1, size+1):
    print(f"{'%s' % (i) * i:>{size}}")