[英]why do i recieve index out of range error?
我試圖做斐波那契數列,但是不是想用過去的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],但是出現錯誤索引超出范圍
在第二個示例中,您要處理兩個不同的列表: tribo
和signature
。 當增加i
的索引時,嘗試從signature
獲取該索引-但signature
僅包含三個元素,因此,當i*3 > 2
,會得到IndexError
。
解決這個問題的更好方法是使用原始代碼,而不是創建兩個不同的數組,然后從返回的數組中切出前三個元素:
def tribonacci(signature, n):
a, b, c = signature
...
return tribo[3:]
不必必須具有三個不同的變量來存儲這三個元素,您還可以利用python的否定列表傾向 (從后數而不是從前數)的想法。 這樣做的更tribonacci
的tribonacci實現可能如下所示:
def tribonacci(signature, n):
tribo = signature[:] # copy the contents of signature, to start with
for i in range(n):
# add the last three elements of tribo together, and append the sum
tribo.append(
tribo[-1] + tribo[-2] + tribo[-3]
)
return tribo[3:]
但是如果給定的signature
少於3個元素,這會給您一個IndexError
。
我相信錯誤在於調用數組:
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
代替tribo。
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.