|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
for i in range(2, 10):
for j in range(1, i):
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
我写成下面这样就一直提示在范围外
for i in range(2,10):
s[i]=[(s[i-1][j-1]+s[i-1][j]) for j in range(1,i)]
看起来您想用两种方法计算杨辉三角(Pascal's Triangle)。首先,我们来检查第一种方法:
triangle = [[1] * i for i in range(1, 11)]
for i in range(2, 10):
for j in range(1, i):
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]
这种方法的逻辑是正确的。现在,让我们看看第二种方法:
s = [[1] * i for i in range(1, 11)]
for i in range(2, 10):
s[i] = [(s[i-1][j-1] + s[i-1][j]) for j in range(1, i)]
我发现了两个问题:
1. 您的列表解析没有考虑到行首和行尾的 1。您需要在列表解析之前和之后分别添加 1。
2. 您需要确保 s 列表被初始化为正确的大小,以便在循环中为其分配值。
在解决了这两个问题后,您的代码应该如下所示:
s = [[1] * i for i in range(1, 11)]
for i in range(2, 10):
s[i] = [1] + [(s[i-1][j-1] + s[i-1][j]) for j in range(1, i)] + [1]
现在,您的第二种方法应该可以正常工作,得到与第一种方法相同的杨辉三角形。
|
|