Python 3嵌套字符串格式

时间:2017-10-04 19:51:04

标签: nested string-formatting python-3.6

我试图用数字生成一个简单的三角形,输出可能如下所示:

  1
 22
333

但是,我无法使用嵌套的String格式,我能做到的最好就是以下内容......

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

理想情况下,我想要排队'嵌套在print方法中。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您的“嵌套”格式字符串需要格式化两次。您想要第二次保留的任何花括号需要在第一次转义,因此{变为{{}变为}}。此外,由于您无法使用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))

答案 1 :(得分:2)

实际上,如果您想要将“线”创建嵌入到 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}}")