在程序中创造空间

时间:2014-04-16 01:40:58

标签: python

我有一个程序在运行时返回它:

A
AAA  
AAAAA
AAAAAAA
AAAAAAAAA

然而我希望它看起来像这样

    A
   AAA  
  AAAAA
 AAAAAAA
AAAAAAAAA

我的代码如下所示:

#A triangle
def print_triangle(letters, rows):

    for i in range(rows):

        print(5 * (-i) * "  " + letters * (i * 2 + 1))

print_triangle("A",5)

任何建议如何获得这个"金字塔效应"?

3 个答案:

答案 0 :(得分:4)

使用str.format获得最佳效果。

BASE_WIDTH = 7
formattingstring = "{}{}{}".format("{:^",BASE_WIDTH,"}")
for substring in ['A',"AAA","AAAAA","AAAAAAA"]:
    formattingstring.format(substring)

这会使用一些格式化技巧来创建一个字符串"{:^7}",使用常量BASE_WIDTH来拉取其大小(在本例中为7)。

str.format用您传递的参数替换原始字符串中的所有{}:之后的任何内容都是格式化字符串。在这种情况下,^表示居中对齐,7表示宽度为7个字符。

答案 1 :(得分:2)

为什么使用5 * (-i) * " "
试试这个:

def print_triangle(letters, rows):
    for i in range(rows):
        print((rows-i-1) * " " + letters * (i * 2 + 1))
print_triangle("A",5)

答案 2 :(得分:0)

如果您使用的Python版本低于3.0(如2.7.6),请尝试使用unichr160的非中断空格字符。

def print_triangle(letters, rows):

    for i in range(rows):

    print(5 * (-i) * unichr(160) + letters * (i * 2 + 1))

print_triangle("A",5)

在Python verison 3.0及更高版本中,尝试使用chr代替相同的160字符:

def print_triangle(letters, rows):

    for i in range(rows):

    print(5 * (-i) * chr(160) + letters * (i * 2 + 1))

print_triangle("A",5)