我试着做斐波那契数列,但不是用过去的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开始。但我不想将“signature”值附加到数组中,而是开始将每个值添加到数组中
所以我尝试了以下代码:
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],但是错误索引超出了范围
我认为错误在于调用数组:
…应该是。。。你知道吗
否则,当n=10时,您将访问不存在的签名(30)。你知道吗
还有其他的bug,比如
s=a+b+b
而不是s=a+b+c
,单靠这个编辑并不能解决这个问题,但是这可能就是您收到越界错误的原因。你知道吗否则最大的错误是使用两个不同的数组。您的
tribo
数组从未以1开头初始化,因此无法成为所需的结果。为了保持核心代码不变,我只需将for循环的范围更改为(0, n-3)
,或者使用signature
代替tribo。你知道吗在第二个示例中,您将处理两个不同的列表:
tribo
和signature
。当您增加i
的索引时,您尝试从signature
获取该索引-但是signature
只有三个元素,因此当i*3 > 2
时,您会得到一个IndexError
。你知道吗解决此问题的更好方法不是创建两个不同的数组,而是使用原始代码,然后从返回的数组中切掉前三个元素:
不必使用三个不同的变量来存储这三个元素,您还可以利用python的负面列表incides的思想(从后面而不是前面开始计算)。执行此操作的
tribonacci
的更简洁实现可能如下所示:如果给定的
signature
小于3个元素,那么这将给您一个IndexError
。你知道吗相关问题 更多 >
编程相关推荐