<p>我认为您需要取消插入代码中添加“sky”行的部分,以便无条件地运行它,而不是只针对大于1的高点。然后您只需要修改<code>base</code>变量,使其对于零高度金字塔有一个有意义的值。比如:</p>
<pre><code>def buildPyramid(height):
grid = []
if height ==0:
base = 1 # added this line, replacing "pass"
else:
base = 2 * height - 1 # moved this down a bit
for xnum in range(base, 0, -2):
# Determine the number of dots
dots = int((base - xnum)/2)
# Create new row in the grid
line = ['.']*dots + ['X']*xnum + ['.']*dots
# insert new row
grid.insert(0, line)
#Add 'sky' rows
for i in range(5 - height): # unindented these lines
grid.insert(0, ['.']*base)
return grid
</code></pre>
<p>另一个改进(与零高度问题无关)是更改代码,以便可以使用<code>grid.append(line)</code>而不是<code>grid.insert(0, line)</code>。添加到列表(平均)是一个固定时间操作,而在开始插入时需要复制整个列表。一种可能的解决方案是将列表倒过来构建(简单地用<code>append</code>调用替换<code>insert</code>调用),然后在返回列表之前在末尾反转列表。另一种选择是先添加天空行(使用<code>append</code>),然后使用向上计数而不是向下计数的循环追加金字塔行:<code>for xnum in range(1, base+1, 2)</code>。你知道吗</p>