我有一个程序在运行时返回它:
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)
任何建议如何获得这个"金字塔效应"?
答案 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),请尝试使用unichr
和160
的非中断空格字符。
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)