我正在尝试使用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以后的多余空间。
问题::在两个代码段中,我都无法删除最后一行的多余空间。
我不知道如何实现此模式,也不会拥有多余的空间每行末尾的数字之后。
答案 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) ]