[DUDA] Aprendo Python y tengo una duda

Iniciado por EXUMER, Noviembre 26, 2018, 11:31:32 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 26, 2018, 11:31:32 AM Ultima modificación: Noviembre 27, 2018, 08:04:13 PM por xyz
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
Código: python
>>> def fib(n):
>>>     a, b = 0, 1


Ahora el programa interpreta el while

Código: python
>>>     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?

Código: python
>>>         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

Código: php
#!/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