gpt4 book ai didi

python - 为什么我会收到索引超出范围错误?

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:55 24 4
gpt4 key购买 nike

我试图做斐波那契数列,但不是用过去的 2 个数字做第三个数字,而是想用最后 3 个数字做第四个数字我的第一个代码是这样的:

def tribonacci(signature, n):
a, b, c = signature
tribo = [signature[0],signature[1],signature[2]]

for i in range(n):
s = a+b+c
a = b
b = c
c = s
tribo.append(c)
return tribo

print(tribonacci([1, 1, 1], 10))

我收到 [1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653],这意味着序列从数字 3 开始,而不是从第一个 1 开始。但是我不想将“签名”值附加到数组中,而是开始将每个值添加到数组中

所以我尝试了这个代码:

def tribonacci(signature, n):
tribo = []

for i in range(0, n):
a = signature[i]
b = signature[2*i]
c = signature[3*i]
s = a+b+b
a = b
b = c
c = s
tribo.append(c)
return tribo


print(tribonacci([1, 1, 1], 10))

我本来期望得到这个[1, 1, 1, 3, 5, 9, 17, 31, 57, 105],但是出现了错误索引超出范围

最佳答案

我相信错误在于调用数组:

for i in range(0, n):
a = signature[i]
b = signature[2*i]
c = signature[3*i]

...应该是...

for i in range(0, n):
a = signature[i]
b = signature[1+i]
c = signature[2+i]

否则,当 n=10 时,您将访问不存在的签名(30)。

还有其他错误,例如s=a+b+b而不是s=a+b+c ,并且仅此编辑无法解决问题,但这可能是您收到越界错误的原因。

否则最大的错误是使用两个不同的数组。您的tribo数组从未以 1 开头进行初始化,因此无法成为所需的结果。为了保持您的核心代码,我只需将 for 循环的范围更改为 (0, n-3)或使用signature代替摩擦。

def tribonacci(signature, n):
for i in range(0, n-3):
a = signature[i]
b = signature[1+i]
c = signature[2+i]
s = a+b+c
a = b
b = c
c = s
signature.append(c)
return signature
print(tribonacci([1, 1, 1], 10))

关于python - 为什么我会收到索引超出范围错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com