优化斐波纳契序列生成器python

时间:2016-11-21 22:23:39

标签: python-3.x

我正在尝试创建一个程序,它创建一个Fibonacci序列,最大值为200的序列。我有基本的设置,我可以计算序列,但我希望以某种方式显示它,我忘了怎么做到这一点。

我希望将数字写入我最初定义为空的数组,计算数字并将它们分配给数组并打印所述数组。在我下面的代码中,计算是可以的,但是当打印到屏幕时,数组显示的值233高于200而不是我正在寻找的。我希望打印出存储在数组中的200以下的所有值。

有没有更好的方法来最初为我想要的数据定义数组,最后在所有元素低于200的情况下打印数组的正确方法是什么?

代码如下:

#This program calculates the fibonacci sequence up to the value of 200
import numpy as np


x = np.empty(14, float) #Ideally creates an empty array to deposit the fibonacci numbers in
f = 0.0 #Dummy variable to be edited in the while loop

#Here the first two values of the sequence are defined alongside a counter starting at i = 1
x[0] = 0.0
x[1] = 1.0
i = 1

#While loop which computes the values and writes them to the array x
while f <= 200:
  f = x[i]+x[i-1] #calculates the sequence element
  i += 1 #Increases the iteration counter by 1 for each loop
  x[i] = f #set the array element equal to the calculated sequence number

print(x)

这里有一个快速终端输出供参考,理想情况下我希望删除最后一个元素:

[   0.    1.    1.    2.    3.    5.    8.   13.   21.   34.   55.   89.
144.  233.]

2 个答案:

答案 0 :(得分:1)

这里有许多风格点。首先,你应该使用整数,而不是浮点数。其次,您应该简单地将每个数字附加到列表中,而不是预先定义特定大小的数组。

这是一个互动环节:

>>> a=[0,1]
>>> while True:
        b=a[-1]+a[-2]
        if b<=200:
            a.append(b)
        else:
            break
>>> a
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]

答案 1 :(得分:0)

这是一种不使用索引的方法:

a = 0
x = [a]
b = 1
while b <= 200:
  x.append(b)
  a, b = b, a+b

print(x)