嗨,伙计们,我有个作业要画一个给定高度的金字塔。以下是height=2和height=3的示例:
..... .....
..... .....
..... ..x..
..X.. .xxx.
.XXX. n = 2 xxxxx n = 3
这是我正在使用的代码。我的问题是如何让0工作:
heights = [3,4,0,5,2]
def buildPyramid(height):
base = 2 * height - 1
grid = []
if height == 0:
pass
else:
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):
grid.insert(0, ['.']*base)
return grid
# Print pyramids.
def print_grid(grid):
# 1. Create all pyramids and add all of them to a list
# 2. For 5 rows
# 2b print the row from p0, p1, p2, p3, p4
for pyr in grid:
for row in pyr:
print (" ".join(row))
pyramidList = []
for h in heights:
pyramidList.append( buildPyramid(h) )
print_grid(pyramidList)
你怎么能建造一个高度为0的金字塔?好吧,你可以简单地输出一个句点网格来表示它没有被填充。为此,您需要处理height==0条件,这只是在代码中传递。下面是它可能的样子:
执行此操作后,您的输出现在如下所示:
我认为您需要取消插入代码中添加“sky”行的部分,以便无条件地运行它,而不是只针对大于1的高点。然后您只需要修改
base
变量,使其对于零高度金字塔有一个有意义的值。比如:另一个改进(与零高度问题无关)是更改代码,以便可以使用
grid.append(line)
而不是grid.insert(0, line)
。添加到列表(平均)是一个固定时间操作,而在开始插入时需要复制整个列表。一种可能的解决方案是将列表倒过来构建(简单地用append
调用替换insert
调用),然后在返回列表之前在末尾反转列表。另一种选择是先添加天空行(使用append
),然后使用向上计数而不是向下计数的循环追加金字塔行:for xnum in range(1, base+1, 2)
。你知道吗相关问题 更多 >
编程相关推荐