这是我一直在使用的代码
def pyramid(n):
print('Pyramid Output')
if (n%2 != 0 and n > 0):
for i in range(1,n-1,1):
spaces = int(.5*n - i + .5)
sides = (i-1)
print(spaces*' ' + sides*"-" + '-' +sides*"-")
但是经过一定值后,金字塔变为左对齐,并开始向右侧添加值。任何帮助将不胜感激
您的spaces
计算(以及您的range
)是错误的。要建造一个5瓦高的金字塔,您需要在前面添加4,3,2,1,0空间:
4444-
333---
22-----
1-------
---------
对于更大的n
,您的spaces
计算完全是错误的。让我们拿n=51
:
# on row 20:
spaces = int(0.5*51 - 20 + .5) # => 25.5 -20 + 0.5 = 6 ... still 31 rows to go
# on row 26:
spaces = int(0.5*51 - 26 + .5) # => 25.5 -26 + 0.5 = 0 ... still 21 rows to go
# on row 30:
spaces = int(0.5*51 - 30 + .5) # => 25.5 -30 + 0.5 is negative ... how add negative space?
修复:
def pyramid(n):
print('Pyramid Output')
if (n%2 != 0 and n > 0): # no even row numbers pyramids allowed!
for i in range(1,n+1,1): # for n=5 yours is 1,2,3 - probably shold be range(1,n+1)
spaces = n-i
sides = 2*(i-1)+1 # optimized
print(spaces*' ', sides*'-', sep="") # optimized
pyramid(51)