Compruebe las entradas que pertenecen a los números de Fibonacci en Python

Me gustaría preguntar cómo puedo recuperar la lista de fibo y luego verificar si el valor ingresado por el usuario está dentro de la lista de fibo.

a , b = 1, 1 while num <= sys.maxint: fibo == a , b = b, a+b if num == (b +a+b): print "It is a Fibonacci number" break else: print "It is not a Fibonacci number" break 

¡Gracias!

Usando una prueba de número de Fibonacci más sofisticada , podría usar

 def is_fibonacci(n): phi = 0.5 + 0.5 * math.sqrt(5.0) a = phi * n return n == 0 or abs(round(a) - a) < 1.0 / n 

(Esta es probablemente la forma más eficiente de determinar si un número es un número de Fibonacci, y probablemente no sea la solución prevista para su tarea. Acabo de incluir esta respuesta para referencia futura).

Una línea pythonica

 def is_fibonacci(n): return n >= 0 and (n==0 or sqrt( 5*n*n - 4).is_integer() or sqrt( 5*n*n + 4).is_integer()) 

Posiblemente una solución no muy eficiente: usar la fórmula de cierre es más eficiente (vea la respuesta de Sven ), pero puede hacer esto:

 def fibs(): a,b = 0,1 yield a yield b while True: a,b = b,a+b yield b n = int(raw_input("please, enter a number ")) for fib in fibs(): if n == fib: print "your number is a Fibonacci number!" break if fib > n: print "your number is not a Fibonacci number!" break 

El generador de fibs le da la lista de los números de Fibonacci. Puede ir a través de la lista, y cada número puede verificar si es igual al que ingresó el usuario (en cuyo caso ya terminó), o si es más grande que el que ingresó el usuario (y también en este caso usted) hecho de nuevo

Espero que esto sea útil, al menos para entender los generadores de Python.

 x = int(input("Enter a number: ")) A = [0, 1] for i in range(2,720): A.append(A[i-1]+A[i-2]) bool=False for i in range(2,720): if x==A[i]: bool=True break if bool==True: print "Found,Index is:",i+1 else: print "Not Found"