En el programa que aparece en la web sobre resolver este problema sobre Fibonacci, tengo un par de dudas
Luego de definir la variable "fib", declada 2; a y b donde a = 0 y b = 1
>>> def fib(n):
>>> a, b = 0, 1
Ahora el programa interpreta el while
>>> while a < n:
>>> print(a, end=' ') y aquí imprime el valor desde a hasta N
Aquí , la duda.. Ahora se vuelven a declarar dos variables nuevamente a y b, pero ahora "a" posee el valor de "b" y "b" el valor de "a+b" ¿como sabe el programa que antes "a" era 0 y "b" era 1? o lo supone porque estoy declarando nuevamente dentro del bucle while?
>>> a, b = b, a+b (LA DUDA)
>>> print()
>>> fib(1000)
En la función fib estás dando el valor 0, 1 respectivamente de la variable a y b no entiendo porque dices que ¿Como sabe el valor anterior? porque aunque tú especifiques esto :
>>> a, b = b, a+b (LA DUDA)
Aún está trabajando con esto:
>>> def fib(n):
>>> a, b = 0, 1
Y si se vuelve a llamar a la función está tomará los valores declarados en ella (en la indentación):
>>> fib(1000)
Creo que es ese el problema, porque no pruebas con un IDE así no lo trabajas en el intérprete y por ahi tiene mas sentido
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# sin título.py
def fib(n):
a, b = 0,1 #Se define el valor de a y b
while a < n: #Comienza el bucle while si se cumple la condición de que a sea menor a n
print(a, end=' ')#Se imprime a
a, b = b, a+b #Se declara que a es igual a b y b a a+b
print()
fib(1000) #Cuando llamas a la función comienza por asignar a, b = 0, 1 porque comienza desde
#el principio y luego entra en el bucle donde cambia el valor de las variables
#Si se vuelve a llamar a la función a volverá a valer 0 y b valdrá 1 hasta que ingrese de nuevo
#al bucle
###################################################################
#Si lo intentas asi.. en la función fib2 no se especifica el valor de a y b dara error.
#Python no va a saber que valor tienen
def fib2(n):
#No Se define el valor de a y b
while a < n: #Comienza el bucle while si se cumple la condición de que a sea menor a n
print(a, end=' ')#Se imprime a
a, b = b, a+b #Se declara que a es igual a b y b a a+b
print()
fib2(1000) #Error
#Python no lo sabe, tu se lo estas diciendo al principio de la función