Autor Tema: Secuencia Fibonacci en Python

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

19 Noviembre, 2020, 02:55 am
Leído 2964 veces

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,969
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Para generar la secuencia de Fibonacci tengo

def fib(numero):
    x,y= 0,1
    list=[]
    while x<=numero:
        list.append(x)
        x, y=y, x+y
    return list
fib(8)

Pero no entiendo debajo de list.append(x) qué signfica x,y=y, x+y

19 Noviembre, 2020, 03:08 am
Respuesta #1

mathtruco

  • Moderador Global
  • Mensajes: 5,552
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola Quema.

Es lo mismo escribir

Código: [Seleccionar]
x=2
y=5

que

Código: [Seleccionar]
x,y=2,5
Para mí, es otra de las barbaridades de Python porque induce a errores sólo con el justificativo de escribir menos.


Si estás recién aprendiendo a programar, no me parece buena idea aprender a programar viendo ejemplos hechos por otros. Creo que lo mejor (igual que matemática) es que uno invierta todo el tiempo necesario en programar lo que uno necesita y sólo al final, si es necesario, busque comparar lo que hizo con alguien más.

Te he dejado un consejo en el último que comentario que hice a tu pregunta Re:  Dudas de Python que también aplica a esta duda. Lo acabo de escribir, por eso seguro aún no lo lees.

19 Noviembre, 2020, 01:14 pm
Respuesta #2

Quema

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,969
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Sigo sin entender esto

list.append(x)
        x, y=y, x+y

El programita dice, parto de una lista vacía list[], luego me fijo si el x<=numero, si lo es, le sumo el valor de x en el último lugar de la lista, pero no veo cómo es que entra en juego el y en esta lista.

19 Noviembre, 2020, 01:42 pm
Respuesta #3

ingmarov

  • Moderador Global
  • Mensajes: 5,422
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola
La linea

x,y=y,x+y   como mencionó mathtruco, equivale a

x=y
y=x+y

Nada impide que lo escribas de la segunda forma, que es más fácil de leer.


Agrego que la primera linea de la función usa la misma forma de inicializar variables
x,y=0,1



Creí entendías la linea list.append(x), si no lo entiendes, list.append(x) agrega a la lista llamada "list" el valor contenido en x.


Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

19 Noviembre, 2020, 03:19 pm
Respuesta #4

ingmarov

  • Moderador Global
  • Mensajes: 5,422
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Te escribo el contenido de las variables durante el programa se está corriendo, el paso cero corresponde al contenido de las variables antes de pasar al ciclo while,

paso    list    x      y   
   0[]   0      1   
   1[0]   1      1   
   2[0,1]   1      2   
   3[0,1,1]   2      3   
   4[0,1,1,2]   3      5   
   5[0,1,1,2,3]   5      8   
   6[0,1,1,2,3,5]   8      13   
   7[0,1,1,2,3,5,8]   13      21   

En esta tabla "paso" no es ninguna variable del programa, solo nos sirve para ver cuantos pasos hace el programa antes de terminar.

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

19 Noviembre, 2020, 06:51 pm
Respuesta #5

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,308
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino

Pero no entiendo debajo de list.append(x) qué signfica x,y=y, x+y

Es que es muy esquemático el programa, no se visualiza bien la idea (a lo mejor se ve todavía peor en este mío, pero voy a ir intentándolo explicar con líneas comentadas)

Código: [Seleccionar]
a=0
b=1
lista =[a,b]            # Introduzco ya el cero y el 1 en la lista, directamente.
for pasos in range (10):
pareja = [a,b]  # a,b son los dos elementos que van a ir siendo los extremos de la derecha de la lista.
a=b             # En la siguiente pareja, "b" va a ser el primero por la izquierda (nueva coordenada "a", digamos)
b=sum(pareja)   # Ahora, la nueva coordenada "b" va a ser la suma a+b de la pareja antigua.
lista.append (b) # Finalmente, se va introduciendo la coordenada "b" más reciente en la lista.
print (lista)


Se puede hacer que el programa trabaje mucho más rápido imprimiendo directamente los datos, sin almacenarlos en lista

Código: [Seleccionar]
a=0                     
b=1                   
print (a)               # Se imprimen a,b en vertical al principio
print (b)
for pasos in range (10):
pareja = [a,b]  # a,b son los dos elementos que van a ir siendo los extremos de la derecha de la lista.
a=b             # En la siguiente pareja, "b" va a ser el primero por la izquierda (nueva coordenada "a", digamos)
b=sum(pareja)   # Ahora, la nueva coordenada "b" va a ser la suma a+b de la pareja antigua.
print (b)       # Se imprimen los sucesivos valores en vertical debajo de 0,1




Saludos.


19 Noviembre, 2020, 08:38 pm
Respuesta #6

mathtruco

  • Moderador Global
  • Mensajes: 5,552
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Algo más sobre list.append. Una virtud de python, comparado con lenguajes más antiguos, es que las variables son objetos y clases y por tanto poseen métodos.Por ejemplo, si tienes la lista

Código: [Seleccionar]
list=[]

en un lenguaje antiguo tendrías que conocer la función que aplicada a list de lo que necesites, por ejemplo la función "append". En cambio ya al definir list=[], que es del tipo list, el lenguaje le asocia ciertos métodos. Dependiendo del editor que usas puedes revisarlos, en mi caso con ipython de linux basta escribir list. y luego presionar dos veces la tecla tab para ver todos los métodos asociados:



Lo bueno de esto: cuando uno necesita hacer algo con su objeto, no necesita saber de memoria todos los métodos asociados, ya que con el procedimiento anterior uno los puede ver y elegir (o como el nombre es bien descriptivo, revisar en google de qué se trata cada uno).