2016-11-20 41 views
0

我已經找出了尋找斐波納契數的代碼。如果輸入不是斐波那契數字,程序將打印出最近的數字。接下來,我如何確定該數字在系列中的位置?就像如果n = 8,它的位置是7,所以輸出7.我嘗試使用索引,但蟒蛇指出,指標並不適用於整數Python(斐波納契數的位置)

def fibs(): 
    a,b = 0,1 
    yield a 
    yield b 
    while True: 
     a,b = b,a+b 
     yield b 

def nearest_fib(n): 
    # If n is a Fibonacci number return Yes and n 
    # Otherwise, return No and the nearest Fibonacci number 

    n = int(input("Please enter an integer:")) 
    for fib in fibs(): 
     if fib == n: 
      return print("Yes! your integer is an fibonacci number") 
     elif fib < n: 
      prev = fib 
     else: 
      # Is n closest to prev or to fib? 
      if n - prev < fib - n: 
       return print("No! Your answer is not a fibonacci number"), prev 
      else: 
       return print("No! Your answer is not a fibonacci number"), fib 

for i in range(1): 
    print(i,nearest_fib(i)) 

回答

1

使用enumerate,這將給你一個指數還有一個值:

for ind, fib in enumerate(fibs()): 

同時存儲索引和值,你目前存儲prev

def fibs(): 
    a,b = 0,1 
    yield a 
    yield b 
    while True: 
     a,b = b,a+b 
     yield b 

def nearest_fib(n): 
    #If n is a Fibonacci number return Yes and n 
    #Otherwise, return No and the nearest Fibonacci number 

    for ind, fib in enumerate(fibs()): 
     if fib == n: 
      print("Yes! your integer is fibonacci number #%d" % (ind + 1)) 
      return n 
     elif fib < n: 
      prev_index = ind 
      prev = fib 
     else: 
      # Is n closest to prev or to fib? 
      if n - prev < fib - n: 
       print("No! Your answer is not a fibonacci number. It is closest to number #%d" % (prev_index + 1)) 
       return prev 
      else: 
       print("No! Your answer is not a fibonacci number. It is closest to number #%d" % (prev_index + 2)) 
       return fib 

for i in range(10): 
    n = int(input("Please enter an integer:")) 
    print(n,nearest_fib(n)) 
+0

我試過,但有太多的輸出。我可以在這裏獲得更多指導嗎?我在for for循環之前包含以下代碼,枚舉fib(fibs()): print(i,fib) – Tammy