我想用下面给出的代码得到一个倒金字塔。类似的代码适用于直立金字塔,但这些调整似乎不适用于倒金字塔。
尝试了很多调整语句,但是没有运气。
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))
*******
#*****#
##***##
###*###
答案 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 = 0
,row
如下所示
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))
*******
#*****#
##***##
###*###