[英]Fibonacci sequence using list in PYTHON?
我有一個關於將斐波那契數列添加到列表中的問題,我是 python 的新手,請幫助我。
這是我的代碼。 我知道這看起來不對,因為它說語法無效。 我真的不知道該怎么辦:(
此代碼適用於不使用列表的普通代碼!
myArray1 = [0]
myArray2 = [1]
while myArray2 < 700:
myArray1, myArray2 = b[i], myArray1+myArray2[i]
print(myArray2)
此代碼將前 700 個斐波那契數列放入列表中。 使用有意義的變量名有助於提高可讀性!
fibonacci_numbers = [0, 1]
for i in range(2,700):
fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])
注意:如果您使用 Python < 3,請使用xrange
而不是range
。
你可能想要這個:
In [77]: a = 0
...: b = 1
...: while b < 700:
...: a, b = b, a+b
...: print a, b
1 1
1 2
2 3
3 5
5 8
8 13
13 21
21 34
34 55
55 89
89 144
144 233
233 377
377 610
610 987
如果要將結果存儲在列表中,請使用list.append
:
In [81]: a = 0
...: b = 1
...: fibo=[a, b]
...: while b < 70:
...: a, b = b, a+b
...: fibo.append(b)
...: print fibo
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
你犯了兩種錯誤; 造成錯誤的錯誤和影響可讀性的錯誤
應該刪除短語 [i] 的兩個實例。 我相信您可能認為它與迭代或元組有關,但這是您收到錯誤的部分原因:
myArray1 = [0]
myArray2 = [1]
while myArray2 < 700:
myArray1, myArray2 = b, myArray1+myArray2
print(myArray2)
您收到錯誤的另一部分原因是變量 b。 你不聲明它,它不屬於。 如果您使用 myArray2 切換出 b,此代碼將正確迭代:
myArray1 = [0]
myArray2 = [1]
while myArray2 < 700:
myArray1, myArray2 = myArray2, myArray1+myArray2
print(myArray2)
然后還有一些易讀性問題。 我會將短語 myArray1 和 2 分別更改為 a 和 b。 首先是因為它太長了; 第二,因為在 python 中它被稱為列表,而不是數組; 第三,因為您指的是整數,而不是列表或數組:
a = [0]
b = [1]
while b < 700:
a, b = b, a+b
print(b)
然后,變量是 myArray1 和 2,但現在是 a 和 b; 這些是整數,它們不需要表示為單個對象列表。 所以去掉它們周圍的括號:
a = 0
b = 1
while b < 700:
a, b = b, a+b
print(b)
然后,此代碼中的最后一個短語是 print(b)。 如果你讓它打印 b 那么你得到的斐波那契數列缺少它的第一個 1。它會讀取(當然在不同的行)1,2,3,5,8,13 等等。 它應該是 1,1,2,3,5,8,13。 您缺少第一個 1。因此需要將 print(b) 更改為 print(a):
a = 0
b = 1
while b < 700:
a, b = b, a+b
print(a)
然后,如果你要表達多個變量,你可以列出所有由逗號分隔的變量,等於所有由逗號分隔的值,如下所示:
a,b,c,d = 1,2,3,4
所以對於您的代碼將轉換為:
a,b = 0,1
while b < 700:
a, b = b, a+b
print(a)
然后擺脫那些額外的空間,空白在python中意味着一些東西,盡管在這里它並沒有真正的區別:
a,b = 0,1
while b < 700:
a, b = b, a+b
print(a)
所以到目前為止所有這些已經足以讓你解決你的原始問題:你正在得到一個迭代(每個連續的值在單獨的行上)。 下面是如何獲得任意數字 n 的列表:
def fibo(n):
fibo_list = []
a,b = 0,1
while b < n:
a,b = b,a+b
fibo_list.append(a)
print(fibo_list)
希望有幫助
def fibonacci(n, results):
if n == 0:
return 0
elif n == 1:
return 1
else :
f = fibonacci(n-1, results) + fibonacci(n-2, results)
f1 = f[:]
results.appned(f1)
return results
您可以使用以下代碼,您的問題只需一行即可解決。 我們正在做的是附加
fib_nums
直到你給定的限制,即
700
然后添加
fib_nums
使用第二個長度為零的列表,我們明確地這樣做,因為它包含
沒有任何
值,我們不需要。
#defining variable
fib_nums = [0, 1]
#just one line code
fib_nums = fib_nums + [fib_nums.append(fib_nums[i-1]+fib_nums[i-2]) for i in range(2,700)]*0
#printing the series
print (fib_nums)
它並不快,但也能正常工作:
def fibonacci(n):
# return a list of fibonacci numbers
if n == 0:
fibonacci_list = []
elif n == 1:
fibonacci_list = [0]
elif n == 2:
fibonacci_list = [0, 1]
elif n > 2:
fibonacci_list = [0, 1]
for i in range(n-2):
fibonacci_list += [0]
fibonacci_list[-1] = fibonacci_list[-2] + fibonacci_list[-3]
return fibonacci_list
def fibonacci(number: int) -> int:
"""
>>> fibonacci(0)
0
>>> fibonacci(1)
1
>>> fibonacci(2)
1
>>> fibonacci(3)
2
>>> fibonacci(4)
3
>>> fibonacci(5)
5
>>> fibonacci(6)
8
>>> fibonacci(7)
13
>>> fibonacci(8)
21
"""
fibs = [0] * (number + 2)
fibs[0] = 0
fibs[1] = 1
for i in range(2, number + 1):
fibs[i] = fibs[i - 1] + fibs[i - 2]
return fibs[number]
if __name__ == "__main__":
from doctest import testmod
testmod()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.