代数金字塔python挑战-更有效的方法?
我正在做一个python挑战,你必须根据列表创建一个倒置的代数金字塔。每个级别(向下)都需要是其上方数字的总和 我为4层创建了这样做的代码 第2部分的挑战是对任意长度的列表执行此操作,因此我添加了len(list)代码以适应。你可以在下面看到我的代码 我只是想知道是否有一种更有效的方法来处理长列表,或者我只需要为其余的层键入更多的代码 另外,我想知道return语句是如何适应它的(下面的代码中给出了更新return语句的提示)代数金字塔python挑战-更有效的方法?,python,Python,我正在做一个python挑战,你必须根据列表创建一个倒置的代数金字塔。每个级别(向下)都需要是其上方数字的总和 我为4层创建了这样做的代码 第2部分的挑战是对任意长度的列表执行此操作,因此我添加了len(list)代码以适应。你可以在下面看到我的代码 我只是想知道是否有一种更有效的方法来处理长列表,或者我只需要为其余的层键入更多的代码 另外,我想知道return语句是如何适应它的(下面的代码中给出了更新return语句的提示) 此函数将使用列表计算您的金字塔: def calcul_pyrami
此函数将使用列表计算您的金字塔:
def calcul_pyramid(base):
pyramid = [base]
for i in range(len(base) - 1):
actual_layer = []
last_layer = pyramid[i]
for j in range(len(last_layer) - 1):
actual_layer.append(last_layer[j] + last_layer[j + 1])
pyramid.append(actual_layer)
return pyramid
此函数将以字符串形式获取金字塔:
def print_pyramid(pyramid):
lines = []
for layer in pyramid:
line = ""
for brick in layer:
line += str(brick)
line += " "
lines.append(line)
pyramid_len = max([len(layer) for layer in lines])
txt = ""
for line in lines:
diff = (pyramid_len - len(line)) / 2
txt += " " * int(diff + 0.5)
txt += line
txt += " " * int(diff - 0.5)
txt += "\n"
print(txt)
现在你可以进入你想要的每个基地,它会工作的
print_pyramid(calcul_pyramid([30,12,10,22])))
您可以使用zip添加值,然后只需设置格式即可:
def pyramid(A):
indent = ""
width = len(str(sum(A)))
while A:
print(indent,*(f"{a:{width}}" for a in A))
A = [a+b for a,b in zip(A,A[1:])]
indent += " "*max(1,width-1)
输出:
L = [30,12,10,22]
pyramid(L)
30 12 10 22
42 22 32
64 54
118
L = [30,12,10,22,23,43]
pyramid(L)
30 12 10 22 23 43
42 22 32 45 66
64 54 77 111
118 131 188
249 319
568
非常感谢,但我不明白的是:len(最后一层)不总是1,因为金字塔[I]总是一个数字吗?金字塔[I]是一个层,一个层有砖,所以len(最后一层)会计算最后一层的砖数。(我给brick打了个电话)非常感谢您查看了您的解决方案,它太先进了,我无法理解。我试过了。比如,我不明白为什么你会得到列表总和的长度。在第一个示例列表中,总和是64-为什么64的长度相关?这项挑战的目的是要成为一个相对初学者,所以我认为解决方案会比较简单。我相信有一天我会回到这个问题上来并理解它。
len(str(sum(A))
仅仅是一种简单的方法,可以了解金字塔中数字的大小,以便使用规则的宽度和缩进进行格式化。我本可以计算出最终的数字来得到确切的尺寸,但这似乎有点过分了。
L = [30,12,10,22]
pyramid(L)
30 12 10 22
42 22 32
64 54
118
L = [30,12,10,22,23,43]
pyramid(L)
30 12 10 22 23 43
42 22 32 45 66
64 54 77 111
118 131 188
249 319
568