无法让我的python金字塔正确显示

问题描述 投票:-1回答:1

这是我一直在使用的代码

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*"-")

但是经过一定值后,金字塔变为左对齐,并开始向右侧添加值。任何帮助将不胜感激

python
1个回答
0
投票

您的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)
© www.soinside.com 2019 - 2024. All rights reserved.