弗洛伊德的三角形

use*_*135 2 python iteration geometry numbers

我有这个代码:

def floyd(n):
    count = 1
    string = ""
    for i in range(1,n+2):
        for j in range(1,i):
            string = string + " " + str(count)
            count = count + 1
        print(string)
        string = ""
print floyd(6) 
Run Code Online (Sandbox Code Playgroud)

它打印:

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
Run Code Online (Sandbox Code Playgroud)

但我希望它看起来像这样:

       1
      2 3
     4 5 6
   7 8 9 10
 11 12 13 14 15
16 17 18 19 20 21
Run Code Online (Sandbox Code Playgroud)

你能帮我搞清楚怎么做吗?

Ry-*_*Ry- 5

Python字符串实际上有一个内置的center()方法,可以为你做到这一点.

print(string.center(total_width))
Run Code Online (Sandbox Code Playgroud)

您可以total_width提前设置:

total_width = -1

for i in xrange(0, n):
    total_width += 1 + len(str((n + n * n) / 2 - i))
Run Code Online (Sandbox Code Playgroud)

要么

total_width = sum(1 + len(str((n + n * n) / 2 - i)) for i in xrange(0, n)) - 1
Run Code Online (Sandbox Code Playgroud)

也就是说,与第n个三角形数(n 2 + n)÷2在同一行中的数字的字符串表示的长度之和.

这是一个演示!