Python中的倒金字塔

时间:2019-05-15 04:42:07

标签: python python-3.x

我想用下面给出的代码得到一个倒金字塔。类似的代码适用于直立金字塔,但这些调整似乎不适用于倒金字塔。

尝试了很多调整语句,但是没有运气。

    def pym(rows):
      result = ''
      for i in range(rows):
        row = ''
        row += '#' * (i-1)
        row += '*' * (2 * (rows-i) + 1)
        row += '#' * (i-1)
        result += row + '\n'
      return result
    print (pym(4))

预期产量

*******
#*****#
##***##
###*###

2 个答案:

答案 0 :(得分:2)

for循环条件略有错误,应将循环更正为for i in range(1,rows+1):而不是for i in range(rows):,然后您的代码才能正常工作。

def pym(rows):
    result = ''

    #Corrected the range
    for i in range(1,rows+1):
        row = ''
        row += '#' * (i-1)
        row += '*' * (2 * (rows-i) + 1)
        row += '#' * (i-1)
        result += row + '\n'
    return result

print (pym(4))

然后输出

*******
#*****#
##***##
###*###

如您所见,从i=0而不是i=1开始会导致行变量出现问题,例如在循环的前两个表达式中使用i = 0row如下所示

In [21]: row = ''                                                                                                                                                                                       

In [22]: row += '#' * -1                                                                                                                                                                                

In [23]: row                                                                                                                                                                                            
Out[23]: ''

此外,由于您只迭代到rows-1,所以最终您也没有得到最终的金字塔。

答案 1 :(得分:1)

更多的pythonic方式可能是使用str.center

def pym(rows):
    n = rows*2
    res = ''
    for i in reversed(range(1,n,2)):
        res += (('*'* i).center(n-1, '#')) + '\n'
    return res

输出:

print(pym(4))
*******
#*****#
##***##
###*###