2017-03-07 38 views
-1

我在Python中编写了一个代码,用于打印按给定阈值截断的斐波那契数列。代码优化思路

m_char=input('threshold: ') 
m=int(m_char) 

def fibonacci(m): 
    lst=[0, 1] 
    while lst[-1] <= m: 
     a = lst[-2]+lst[-1] 
     if a <= m: 
      lst.append(a) 
     else: 
      print(lst) 
      return 

fibonacci(m) 

我不喜欢在whileif声明变量m双重检查:我敢肯定它是多余的,所以写出更高效的代码的方式。我想保留列表的使用。你有什么想法吗?

回答

1
def fibonacci(m): 
    lst=[0, 1] 
    a = lst[-2]+lst[-1] 
    while a <= m: 
     lst.append(a) 
     a = lst[-2]+lst[-1] 
    return lst 

可以计算a每一次循环,并用它来确定循环是否继续

1

只需使用

while True: 

它实际上决定了循环运行的频率循环内的检查。

根本不使用列表索引会稍微有效一些,但用两个变量维护最后两个斐波那契数。此外,它更加地道,返回列表而不是打印它。让调用代码打印列表,如果它想:

def fibonacci(m): 
    lst=[0, 1] 
    a,b = lst 
    while True: 
     a,b = b, a+b 
     if b <= m: 
      lst.append(b) 
     else: 
      return lst