Escribí un código en Python que imprime una secuencia de Fibonacci truncada en un umbral dado.

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)

No me gusta la doble verificación de la variable m en la declaración while y if: estoy bastante seguro de que es redundante, por lo que hay una manera de escribir código más eficiente . Me gustaría preservar el uso de listas. ¿Tiene usted alguna idea?

-1
Bernheart 7 mar. 2017 a las 19:32

2 respuestas

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

Puede calcular a una vez por ciclo y usarlo para determinar si el ciclo continúa

1
Patrick Haugh 7 mar. 2017 a las 16:41

Sólo úselo

while True:

Es la comprobación dentro del bucle lo que realmente determina con qué frecuencia se ejecuta el bucle.

Sería un poco más eficiente no utilizar la indexación de listas, sino mantener los dos últimos números de Fibonacci con dos variables. Además, es más idiomático devolver la lista en lugar de imprimirla. Deje que el código de llamada imprima la lista si lo desea:

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
1
John Coleman 7 mar. 2017 a las 16:59