如何在python3的每一行末尾删除此多余的尾随空格

时间:2018-08-23 18:48:11

标签: python python-3.x

我正在尝试使用python3中的print()函数打印此模式。

        0
      0 1 0
    0 1 2 1 0
  0 1 2 3 2 1 0
    0 1 2 1 0
      0 1 0
        0

以下是我实现此问题的两种方法。

  

数字方法

limit = int(input())
space = '  '
for i in range(0, limit + 1):
    print(space * (limit - i), end='')

    for j in range(2 * i + 1):
        if j > i:
            print(i - (j - i), end=' ')
        else:
            print(j, end=" ")
    print()


for i in range(0, limit)[::-1]:
    print(space * (limit - i), end='')

    for j in range(2 * i + 1)[::-1]:

        if j > i:
            print(i - (j - i), end=' ')
        else:
            print(j, end=" ")
    print()
  

字符串和列表理解方法

gap = '  '
y = int(input())
y = y + 1
for n in range(1, y + 1):
    str1 = ' '.join(str(e) for e in list(range(n)))
    str2 = ' '.join(str(e) for e in list(range(n - 1))[::-1])
    print(gap * (y - n) + str1 + " " + str2.strip())

for n in range(1, y)[::-1]:
    str1 = ' '.join(str(e) for e in list(range(n)))
    str2 = ' '.join(str(e) for e in list(range(n - 1))[::-1])
    print(gap * (y - n) + str1 + " " + str2.strip())

图案正在正确打印,但是当我将其提交给在线判断时,它不接受。

wrong answer 1st lines differ - expected: '    0', found: '    0 '

它希望删除0以后的多余空间。

问题::在两个代码段中,我都无法删除最后一行的多余空间。
我不知道如何实现此模式,也不会拥有多余的空间每行末尾的数字之后。

1 个答案:

答案 0 :(得分:2)

问题似乎出在表达式gap * (y - n) + str1 + " " + str2.strip()上。对于第一行,str为空,因此您有str1,后跟一个空格,后面没有空格,这意味着您在行尾有一个空格。解决方案是先将列表添加在一起,然后再添加join

for n in range(1, y + 1):
    list1 = [str(e) for e in list(range(n))]
    list2 = [str(e) for e in list(range(n - 1))[::-1]]
    print(gap * (y - n)+" ".join(list1+list2))

顺便说一句,list(range(n - 1))[::-1]的替代方法是list(range(n-2,-1,-1))

您还可以将列表理解与各种技巧相结合,例如

[str(e) if e < n else str(2*n-e) for e in range(2*n+1) ]