python for循环打印下降范围的多行

时间:2015-08-02 11:24:27

标签: python python-2.7

获得类似

的输出
0 1 2 3 4 5 6 7 8 9 
  0 1 2 3 4 5 6 7 8 
    0 1 2 3 4 5 6 7
      0 1 2 3 4 5 6
        0 1 2 3 4 5
          0 1 2 3 4 
            0 1 2 3 
              0 1 2
                0 1
                  0

我该怎么办? 我要去像

这样的东西
for y in range(10):
    print
    i = ?
    for x in range(i):
        print x,
        i = i - 1

更新范围,但我不确定如何编写它。

或者我应该保持范围相同并以某种方式用空格替换每个整数吗?

2 个答案:

答案 0 :(得分:2)

在每行打印数字之前打印空格:

for y in range(10):
    print
    i = 10 - y
    print ' ' * (y * 2),  # whitespaces
    for x in range(i):
        print x,
        i = i - 1

答案 1 :(得分:2)

您可以使用str.format右键对齐输出,允许范围和空格,并在每次迭代时按-i递减内部循环:

for i in xrange(10):
    print("{:>19}".format(" ".join(map(str, xrange(10-i)))))

输出:

0 1 2 3 4 5 6 7 8 9
  0 1 2 3 4 5 6 7 8
    0 1 2 3 4 5 6 7
      0 1 2 3 4 5 6
        0 1 2 3 4 5
          0 1 2 3 4
            0 1 2 3
              0 1 2
                0 1
                  0

如果您希望它适用于任何n,您需要知道最长字符串的长度:

spaces = len(" ".join(map(str, xrange(n))))
for i in xrange(n):
    print("{:>{spaces}}".format(" ".join(map(str, xrange(n-i))), spaces=spaces))