CursosEmpresasBlogLiveConfPrecios

La sucesión de Fibonacci

Clase 13 de 21 • Curso Profesional de Python

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    ¿Qué necesitas saber para tomar el curso?

    ¿Qué necesitas saber para tomar el curso?

    03:15 min
  • 2
    ¿Cómo funciona Python?

    ¿Cómo funciona Python?

    07:49 min
  • 3
    Cómo organizar las carpetas de tus proyectos

    Cómo organizar las carpetas de tus proyectos

    07:15 min

Static Typing

  • 4
    ¿Qué son los tipados?

    ¿Qué son los tipados?

    10:26 min
  • 5
    Tipado estático en Python

    Tipado estático en Python

    14:26 min
  • 6
    Practicando el tipado estático

    Practicando el tipado estático

    13:33 min

Conceptos avanzados de funciones

  • 7
    Scope: alcance de las variables

    Scope: alcance de las variables

    06:32 min
  • 8
    Closures

    Closures

    08:21 min
  • 9
    Programando closures

    Programando closures

    07:00 min
  • 10
    Decoradores

    Decoradores

    06:19 min
  • 11
    Programando decoradores

    Programando decoradores

    13:05 min

Estructuras de datos avanzadas

  • 12
    Iteradores

    Iteradores

    13:52 min
  • 13
    La sucesión de Fibonacci

    La sucesión de Fibonacci

    Viendo ahora
  • 14
    Generadores

    Generadores

    07:22 min
  • 15
    Mejorando nuestra sucesión de Fibonacci

    Mejorando nuestra sucesión de Fibonacci

    06:53 min
  • 16
    Sets

    Sets

    10:58 min
  • 17
    Operaciones con sets

    Operaciones con sets

    06:09 min
  • 18
    Eliminando los repetidos de una lista

    Eliminando los repetidos de una lista

    05:20 min

Bonus

  • 19
    Manejo de fechas

    Manejo de fechas

    08:44 min
  • 20
    Time zones

    Time zones

    08:46 min

Conclusión

  • 21
    Completaste la trilogía. ¿Cómo seguir?

    Completaste la trilogía. ¿Cómo seguir?

    01:30 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
        David Guerrero Morales Guerrero

        David Guerrero Morales Guerrero

        student•
        hace 5 años
        from time import sleep class FiboIter(): def __init__(self, max_number:int): self.max_number = max_number def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 if self.aux >= self.max_number: raise StopIteration self.n1, self.n2 = self.n2, self.aux self.counter += 1 return self.aux if __name__ == "__main__": for element in FiboIter(39): print(element) sleep(0.1)
          Kenny Rogger Canahualpa Patilla

          Kenny Rogger Canahualpa Patilla

          student•
          hace 5 años

          Si bien es cierto tu codigo funciona con un atributo de instancia, cuando este no tiene un atributo de instancia el codigo no funciona:

          one.PNG
          Para solucionar esto y funcione con o sin un atributo de instancia: "talvez no se el codigo mas eficiente en términos de ahorro de lineas de codigo, pero funciona"
          carbon (2).png

          Dennis Alejandro Salinas Estrada

          Dennis Alejandro Salinas Estrada

          student•
          hace 4 años

          Me inspire en sus comentarios para mi solucion, ademas de que tambien son menos lineas. Que opinan?

        Fabricio González Guasque

        Fabricio González Guasque

        student•
        hace 5 años

        Mi aporte al reto! Saludos

        fibo.jpg

        No puse el output porque es lo mismo que lo visto en la clase, solamente que se detiene cuando llegamos al numero que le pasamos.

          Reinaldo Mendoza

          Reinaldo Mendoza

          student•
          hace 4 años

          Muchas gracias por compartir

          David Silva Apango

          David Silva Apango

          student•
          hace 4 años

          ¿Y si el máximo fuera 0 ó 1?

        Cristian Bastidas

        Cristian Bastidas

        student•
        hace 4 años

        Adicionalmente a la sucesión de Fibonacci hice un iterador que obtiene los números primos que existen hasta cierto n. Me parece increíble lo que se puede hacer con los iteradores. 😮

        !Números Primos

          Mauricio Gonzalez Falcon

          Mauricio Gonzalez Falcon

          student•
          hace 4 años

          Genial tu aporte Cristian. Lo único que puedo darte feedback, es que sí el usuario no ingresa un límite, es decir, infinito.

          Como respondería el programa, saludos!

        Dennis Alejandro Salinas Estrada

        Dennis Alejandro Salinas Estrada

        student•
        hace 4 años

        Este es mi solucion, funciona con o sin numero maximo. Decidi hacerlo asi gracias a un comentario que mire.

        import time class FiboIter(): def __init__(self, max=None): self.max = max def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if self.counter == 0: self.counter += 1 return self.n1 elif self.counter ==1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 self.counter += 1 self.n1, self.n2 = self.n2, self.aux if not self.max: return self.aux, self.counter if self.max: if self.aux > self.max: raise StopIteration else: return self.aux, self.counter if __name__ == '__main__': for element in FiboIter(): print(element) time.sleep(.05)

        Una duda que me surgio fue el de como acceder opcionalmente al contador, ya que en el codigo se agrega pero no encontre forma de acceder a el en el codigo como e esta. ademas de cuestionarme su empleo ya que no parece tener algun tipo de utilidad.

          Salvador Sebastian Márquez Herrera

          Salvador Sebastian Márquez Herrera

          student•
          hace 4 años

          Dennis tu código me ayudo mucho, por cierto no es necesario que retornes el contador, con el aux basta para que no te imprima una tupla :)

          Alberto Enrique Alonso De la Hoz

          Alberto Enrique Alonso De la Hoz

          student•
          hace 4 años

          Puedes acceder al indice de la iteración, que en este caso es igual al atributo self.counter de tu clase, utilizando la función enumerate(<iterador>) dentro del for. Siguiendo tu ejemplo:

          for index, element in enumerate( FiboIter() ): print(element) print(index) time.sleep(.05)
        Bryan

        Bryan

        student•
        hace 5 años

        Como detengo la consola?

          Yair Hernández

          Yair Hernández

          student•
          hace 5 años

          ctrl+C

          Andrés López

          Andrés López

          student•
          hace 5 años

          Con ctrl + C

        Jonathan Edwin Gutiérrez Olvera

        Jonathan Edwin Gutiérrez Olvera

        student•
        hace 4 años

        Una solución simple y eficaz 😁

        code.png

          Arturo Escobar Fernandez

          Arturo Escobar Fernandez

          student•
          hace 4 años

          Exacto, la respuesta estaba justo en la clase anterior, no entendí por que se mencionaba en la clase que el reto era difícil. Buena!

          Kenneth Henry Meier Oborski

          Kenneth Henry Meier Oborski

          student•
          hace 4 años

          Con que programa haces que el codigo te salga de esa manera ?

        Francisco Moreno

        Francisco Moreno

        student•
        hace 4 años

        This is my code. Please comment any error did you’ll find.

        <import time class Fibonacci(): def __init__(self, nmax): self.nmax = nmax def __iter__(self): self.num1 = 0 self.num2 = 1 self.counter = 0 return self def __next__(self): if self.counter == 0: self.counter += 1 return self.num1 elif self.counter == 1: self.counter += 1 return self.num2 else: self.aux = self.num1 + self.num2 # Like a break; if the aux > nmax: stop, nmax is the limit. if self.aux > self.nmax: print('Finished.') raise StopIteration self.num1, self.num2 = self.num2, self.aux self.counter += 1 return self.aux def run(): try: nmax = int(input('Introduce the max limit number that can iterate this function: \n')) if nmax > 0: fibonacci = Fibonacci(nmax) for element in fibonacci: print(f' \n{element}') time.sleep(1) elif nmax == 0: print(0) else: print('Introduce a positive number.') run() except ValueError as ve: print('Only integer and positive numbers.') run() if __name__ == '__main__': run() >
          Luis Alejandro Vera Hernandez

          Luis Alejandro Vera Hernandez

          student•
          hace 4 años

          Gracias, me ayudo tu ejemplo, lo vi muy bueno, aunque yo le puse para que imprima la cantidad de ciclos que ingrese el usuario, el tuyo creo que compara la cantidad maxima del usuario con el primer numero al que llegue la sucesion.

        Cesar Hernández Ramírez

        Cesar Hernández Ramírez

        student•
        hace 4 años

        Algo que descubrí al estar haciendo el reto es podemos inicializar un iterador solo con el método next, pero fallará porque no tendrá los atributos que declaremos en el metodo iter. Y lo curioso es que nosotros no podemos utilizar __iter__() para inicializar el iterador como haciamos con iter(objeto) . En cambio con __next__() sí podremos ir avanzadando por cada elemento del iterador 👍

          Luis Felipe Bravo Hernández

          Luis Felipe Bravo Hernández

          student•
          hace 3 años

          Cuando me encontre este problema, lo resolvi llamando a __ iter __ desde __ init __:

          def __init__(self, max=None): self.max = max self.__iter__()
        Juan Carlos Ruiz Montaño

        Juan Carlos Ruiz Montaño

        student•
        hace 5 años
        import time class FiboIter(): def __init__(selft, max = None): if max == None: selft.max = None else: selft.max = max def __iter__(selft): selft.n1 = 0 selft.n2 = 1 selft.counter = 0 return selft def __next__(selft): def fibo(): #funcion fibonacci selft.aux = selft.n1 + selft.n2 #selft.n1 = selft.n2 #selft.n2 = selft.aux selft.n1, selft.n2 = selft.n2, selft.aux selft.counter += 1 return selft.aux if selft.counter == 0: selft.counter += 1 return selft.n1 elif selft.counter == 1: selft.counter += 1 return selft.n2 elif selft.max == None: return fibo() #ejecucion infinita elif selft.counter >= selft.max: raise StopIteration else: return fibo()#ejecucion controlada if __name__ == "__main__": fibonacci = FiboIter() i = 0 for element in fibonacci: print(str(i) + " Vueltas") print(element) time.sleep(0.05) i += 1
          Jesús Ramón Beltrán Chan

          Jesús Ramón Beltrán Chan

          student•
          hace 4 años

          Como sugerencia, en la primer condición del constructor si max es igual a None, no es necesario volver a asignarle None, puedes usar algo asi en su lugar:

          if max is not None: assert max > 0, "max debe ser mayor que 0" self.max = max
        Tomás Retamal Venegas

        Tomás Retamal Venegas

        student•
        hace 4 años

        Para saber si entendí bien, ¿Un iterable es una instancia de un iterador? Es decir, si un iterador se define como una clase, entonces ¿Al instanciarlo obtenemos un iterable?

          Fernando Hernandez

          Fernando Hernandez

          student•
          hace 4 años

          Es así ...

        José Rodrigo Arana Hi

        José Rodrigo Arana Hi

        student•
        hace 4 años

        ¿Por qué el método dunder next puede tomar los atributos de dunder inter? ¿Qué no están en un scope diferente?

          Jonathan Sánchez Luna

          Jonathan Sánchez Luna

          student•
          hace 4 años

          Porque se trata de métodos de una clase, y al instanciar dicha clase, todos sus atributos se encuentran en el scope de la clase, así todos sus métodos los pueden accesar.

          José Rodrigo Arana Hi

          José Rodrigo Arana Hi

          student•
          hace 4 años

          Imaginé que el self (o la instancia) tenía algo que ver. Muchas gracias Jonny, es bueno saber que hay alguien más de BC estudiando (por lo de TJ). Salu2 desde Mxli.

        Gustavo Adolfo Perez Ramos

        Gustavo Adolfo Perez Ramos

        student•
        hace 4 años
        reto_2.png
        Yuri Ochoa

        Yuri Ochoa

        student•
        hace 3 años

        ¡Hola! Dejo mi aporte, estoy en proceso de aprendizaje...agradezco sus comentarios para poder mejorar el programa.

        Iterators.PNG

          Carlos Arturo Gonzalez Meyberg

          Carlos Arturo Gonzalez Meyberg

          student•
          hace 3 años

          Haciendo la prueba de escritorio funciona

        Adriana Razo De León

        Adriana Razo De León

        student•
        hace 4 años

        Hola se aceptan comentarios, no soy nada experta...

        iterators_1.png
        iterators_2.png

          Adriana Razo De León

          Adriana Razo De León

          student•
          hace 4 años

          ups! mi error fue que lo limité al número de fibonacci y no a la posición de la serie...

          iterators_2.png

        Pablo .

        Pablo .

        student•
        hace 4 años
        import time class FiboIter(): def __init__(self, max=None): self.max = max def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if not self.max or self.counter <= self.max: if self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 self.n1, self.n2 = self.n2, self.aux self.counter += 1 return self.aux else: raise StopIteration #Visualizar en consola if __name__ == '__main__': fibonacci = FiboIter(25) for idx, element in enumerate(fibonacci): print(idx, " ", element) time.sleep(0.05)
          Elliot Ramirez

          Elliot Ramirez

          student•
          hace 4 años

          Gracias por tu aporte... indexarlo lo mejor

        Alberto Enrique Alonso De la Hoz

        Alberto Enrique Alonso De la Hoz

        student•
        hace 4 años

        Lo quise hacer de esta manera. Utilicé atributos privados en la clase agregando "__" al inicio de sus nombres. Me pareció correcto inicializar las variables de los números en el constructor y dejar solamente el contador en el método iter(). No se que opinen de esto último.

        class Fibonacci: def __init__( self,upper ): self.__upper = upper self.__num1 = 0 self.__num2 = 1 def __iter__( self ): self.__counter = 0 return self def __next__( self ): if self.__counter < self.__upper: returned = self.__num1 self.__num1 = self.__num2 self.__num2 += returned self.__counter += 1 return returned else: raise StopIteration if __name__ == '__main__': for i in Fibonacci(20): print(i,end=" ")
        Alex Junior Rodriguez Huerta

        Alex Junior Rodriguez Huerta

        student•
        hace 4 años

        Este es mi aporte, entendí que el usuario debería llenar el máximo valor y este debe parar.

        import time class FiboIter(): def __init__(self, max = int(input("Ingresa un valor: "))): self.max = max def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 self.cnt = 0 return self def __next__(self): if not self.max or self.n1 + self.n2 <= self.max: if self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 self.n1, self.n2 = self.n2, self.aux self.counter += 1 return self.aux else: raise StopIteration if __name__ == "__main__": fibonacci = FiboIter() for element in fibonacci: print(element) time.sleep(1)
        Bryan Estiven Silva Mercado

        Bryan Estiven Silva Mercado

        student•
        hace 5 años
        import time class fiboIter(): def __init__(self,max): self.max = max def __iter__(self): self.number1 = 0 self.number2 = 1 self.counter = 0 return self def __next__(self): if self.counter == 0: self.counter +=1 return self.number1 elif self.counter == 1: self.counter +=1 return self.number1 elif self.number2 < self.max: self.aux = self.number1 + self.number2 """ esto <self.number1 = self.number2 self.number2 = self.aux> se puede reducir de la siguiente forma """ self.number1, self.number2 = self.number2, self.aux self.counter +=1 return self.aux else: raise StopIteration if __name__ == "__main__": fibonacci = fiboIter(1597) for element in fibonacci: print(element) time.sleep(1)
        María Camila Fernández Espinel

        María Camila Fernández Espinel

        student•
        hace 4 años

        No se si lo que hice esta bien, acepto cualquier tipo de comentarios :P

        import time class Fiboiter(): def __init__(self, max = None) -> None: self.max = max self.aux = 0 def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 elif self.aux <= self.max: self.aux = self.n1 + self.n2 # self.n1 = self.n2 # self.n2 = self.aux self.n1, self.n2 = self.n2, self.aux self.counter += 1 return self.aux elif self.aux >= self.max: raise StopIteration if __name__ == "__main__": max = int(input("Enter the max of the Fibonacci sucession's: ")) fibonacci = Fiboiter(max) for element in fibonacci: print(element) time.sleep(0.05)
          Diego Fernando Pedraza Cardenas

          Diego Fernando Pedraza Cardenas

          student•
          hace 4 años

          Veo dos detalles en tu código, cuando no ingresas un argumento es decir None el te da el error que debes ingresar un valor numérico, en mi caso lo deje para que si no ingresas nada el te de números hasta infinito y lo otro es que siempre te imprime un numero después del máximo, si haces la prueba por ejemplo con 6 el te alcanza a imprimir 8.

        Ariel Ricardo Cornejo Jiménez

        Ariel Ricardo Cornejo Jiménez

        student•
        hace 4 años

        Hola, alguien puede correr mi codigo y ayudarme a ver que hice mal?

        el counter aumenta bien pero queda en loop el programa , no entra a la exception

        import time class FiboIter(): '''Clase que realiza la sucesion de fibonacci hasta un numero maximo''' def __init__(self, max=None): self.max = max def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if self.max != None: print("valor max-> ", self.max, " - ", " counter-> ", self.counter) else: max = input("ingrese numero maximo de la sucesion: ") self.max = max if self.counter == self.max: print("max y counter iguales") raise StopIteration elif self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 # self.n1 = self.n2 # self.n2 = self.aux self.n1 , self.n2 = self.n2, self.aux #swapin' values self.counter += 1 return self.aux if __name__ == '__main__': fibonacci = FiboIter() for element in fibonacci: print(element) time.sleep(1)
          Pablo Antipan Quiñenao

          Pablo Antipan Quiñenao

          student•
          hace 4 años

          Hola! Faltaba transformar el input a integer:

          import time class FiboIter: """Clase que realiza la sucesion de fibonacci hasta un numero maximo""" def __init__(self, max=None): self.max = max def __iter__(self): self.n1 = 0 self.n2 = 1 self.counter = 0 return self def __next__(self): if self.max != None: print("valor max-> ", self.max, " - ", " counter-> ", self.counter) else: max = input("Ingrese numero maximo de la sucesion: ") self.max = max print(self.counter, self.max) if self.counter == int(self.max): print("max y counter iguales") raise StopIteration if self.counter == 0: self.counter += 1 return self.n1 elif self.counter == 1: self.counter += 1 return self.n2 else: self.aux = self.n1 + self.n2 # self.n1 = self.n2 # self.n2 = self.aux self.n1, self.n2 = self.n2, self.aux # swapin' values self.counter += 1 return self.aux if __name__ == "__main__": fibonacci = FiboIter() for element in fibonacci: print(element) time.sleep(0.2)

          Saludos!

          Ariel Ricardo Cornejo Jiménez

          Ariel Ricardo Cornejo Jiménez

          student•
          hace 4 años

          muchas gracias pablo, saludos!