有没有大佬看看这样为什么不行
for i in range(2, 10):for j in range(1, i):
triangle = triangle + triangle
我写成下面这样就一直提示在范围外
for i in range(2,10):
s=[(s+s) for j in range(1,i)] 看起来您想用两种方法计算杨辉三角(Pascal's Triangle)。首先,我们来检查第一种方法:
triangle = [ * i for i in range(1, 11)]
for i in range(2, 10):
for j in range(1, i):
triangle = triangle + triangle
这种方法的逻辑是正确的。现在,让我们看看第二种方法:
s = [ * i for i in range(1, 11)]
for i in range(2, 10):
s = [(s + s) for j in range(1, i)]
我发现了两个问题:
1. 您的列表解析没有考虑到行首和行尾的 1。您需要在列表解析之前和之后分别添加 1。
2. 您需要确保s列表被初始化为正确的大小,以便在循环中为其分配值。
在解决了这两个问题后,您的代码应该如下所示:
s = [ * i for i in range(1, 11)]
for i in range(2, 10):
s = + [(s + s) for j in range(1, i)] +
现在,您的第二种方法应该可以正常工作,得到与第一种方法相同的杨辉三角形。 问题出现在您的第二个代码段中,具体来说是 `s` 的下标超出了指定的范围。对于 `i` 等于 2 的情况, `s` 是一个空列表,并且您将尝试访问 `s[-1]` 去做加法运算,因为您在 `range(1, i)` 中使用了 `j - 1`。
为了解决这个问题,您可以修改循环以避免访问不存在的索引。以下是您可能想要尝试的更改后的代码:
s = [ * i for i in range(1, 10)]
for i in range(1, 10):
for j in range(i):
if j == 0 or j == i-1:
s = 1
else:
s = s + s
这将创建一个 `s` 列表,并根据需要为其填充必要数量的零。循环将遍历从 1 到 9 的行,然后对于每一行循环遍历从 0 到该行号减去 1 的列。此时,您可以将每个三角形中的值计算为上一行中同一列和前一列的值的和。第一列和最后一列都被直接设置为 1,因为它们始终是三角形的边缘。
有用请设置最佳答案
页:
[1]