在循环中打印时缺少空格

时间:2014-09-30 15:07:33

标签: python

我在遵循引用时有这个奇怪的问题,这段代码:

for r in range(10):
    for c in range(r):
        print "",
    for c in range(10-r):
        print c,
    print ""

应打印出类似这样的内容:

    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

但相反,我得到了这个:

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

任何人都可以向我解释右侧缩进的原因,看起来很简单,但我不知道我能做些什么来解决这个问题?

3 个答案:

答案 0 :(得分:1)

您错误地打印了前导空格。您正在打印只打印一个空格的空引号("")。执行print c后,打印c后会打印一个空格。您应该打印" "来获得正确的间距。这是一个非常微妙的事情需要注意。

for r in range(10):
    for c in range(r):
        print " ", #print it here
    for c in range(10-r):
        print c,
    print ""

Test

答案 1 :(得分:1)

如果你想格式化它,最好让Python为你做,而不是计算显式和隐藏的隐式空格。有关{:^19}的含义以及更多内容,请参阅string formatting docs

for i in range(10):
    nums = ' '.join(str(x) for x in range(10 - i))
    #print '{:^19}'.format(nums) # reproduces your "broken" code
    print '{:>19}'.format(nums) # your desired output

有时使用print函数是一个很好的选择,因为您可以通过将关键字参数end设置为空字符串来消除隐藏空格:

from __future__ import print_function # must be at the top of the file.
# ...
print(x, end='')

答案 2 :(得分:0)

你根本就没有在左侧创建足够的缩进(打印时没有右侧缩进)。

对于每个新行,您希望通过两个空格来增加缩进,因为您在上面的行上添加了一个数字+空格。 "",会自动添加一个空格(这就是为什么数字之间有空格)。由于您需要添加两个,只需在引号中添加一个空格,如下所示:" ",

额外的空格填充了上面一行中的数字空格。 "",中的逗号只填充数字之间的空格。澄清一下:" ",使用与c,相同的空格,两个字符,而"",仅使用一个字符。

以下是使用小修补程序的代码:

for r in range(10):
    for c in range(r):
        print " ", # added a whitespace here for correct indent
    for c in range(10-r):
        print c,
    print ""