我有一个关于制作斐波那契序列到列表的问题,我只是新来的python有人帮助我。
这是我的代码。我知道这看起来有点不对劲,因为它说的语法无效。我真的不知道该怎么办:(
此代码适用于普通代码而不使用列表!
myArray1 = [0]
myArray2 = [1]
while myArray2 < 700:
myArray1, myArray2 = b[i], myArray1+myArray2[i]
print(myArray2)
答案 0 :(得分:9)
此代码将前700个斐波那契数字放在一个列表中。使用有意义的变量名有助于提高可读性!
fibonacci_numbers = [0, 1]
for i in range(2,700):
fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])
注意:如果你正在使用Python&lt; 3,使用xrange
代替range
。
答案 1 :(得分:5)
你可能想要这个:
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]
答案 2 :(得分:1)
您犯了两种错误;产生错误的错误和影响可读性的错误
应删除短语[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。您缺少第一个。因此,需要将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)
希望有帮助
答案 3 :(得分:0)
您可以使用以下代码,只需一行即可解决您的问题。 我们在做什么追加
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)
答案 4 :(得分:0)
它不是很快,但是效果很好:
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
答案 5 :(得分:0)
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()
答案 6 :(得分:-1)
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