2017-03-07 34 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