下面的代码有一些打印语句,可以帮助说明它是如何工作的。我在一个IPython笔记本上运行。我的输出如下:[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
除了输出看起来应该这样之外,计算方法实际上遵循了Pascal三角形的原始定义,其中每一行都是从上面的一行构建的。(有些方法使用组合数学/阶乘,这可能给出正确的答案,但不遵循帕斯卡三角的原始精神,afaik。)
代码如下:def MakeTriangle(numberOfRows):
"""the print statements are not required. They are just to help see how it works."""
triangle=[[1]] #base case (i.e., 0th row)
print 'triangle[-1] is ', triangle[-1]
for _x in range(numberOfRows - 1): #_x isn't used
zipperd = zip([0] + triangle[-1], triangle[-1] + [0])
print "zipperd: ", zipperd
newRow = map(sum, zipperd)
triangle.append(list(newRow))
print 'triangle[-1] is ', triangle[-1] #to help see how tri is built
print "\n\n"
return triangle
for row in MakeTriangle(5):
print('{0:^50}'.format(row))
要开始了解它的工作原理,请注意上面函数zip和map的以下简单情况:x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
print zipped #output is [(1, 4), (2, 5), (3, 6)]
print map(sum, zipped) #output is [5, 7, 9]
使用MakeTriangle函数中的print语句,您将获得此输出,以帮助您进一步了解代码的工作原理:triangle[-1] is [1]
zipperd: [(0, 1), (1, 0)]
triangle[-1] is [1, 1]
zipperd: [(0, 1), (1, 1), (1, 0)]
triangle[-1] is [1, 2, 1]
zipperd: [(0, 1), (1, 2), (2, 1), (1, 0)]
triangle[-1] is [1, 3, 3, 1]
zipperd: [(0, 1), (1, 3), (3, 3), (3, 1), (1, 0)]
triangle[-1] is [1, 4, 6, 4, 1]
阅读下面的文档,同时查看此输出,它将开始有意义:
如果仍然没有意义,请将这些print语句粘贴到MakeTriangle的for循环中:print "[0] + triangle[-1] is ", [0] + triangle[-1]
print "triangle[-1] + [0] is ", triangle[-1] + [0]