Tutorial python

Tutorial en español sobre el lenguaje de programación más Zen

  • Curso Básico
    • Instalar Python
    • 1 Comentarios
    • 2 Variables
    • 3 Listas
    • 4 Condicionales
    • 5 Bucles
    • 6 Módulos
  • Otros recursos
  • Blog

Bucles while y for en python

while en Python

En ocasiones, tenemos que repetir varias veces una determinada tarea hasta conseguir nuestro objetivo. En Python esto se realiza con el comando while. A modo de ejemplo while en Python se usa así:

>>> vuelta=1
>>> while vuelta<10:
>>>     print("Vuelta "+str(vuelta))
>>>     vuelta=vuelta+1
Vuelta 1
Vuelta 2
Vuelta 3
Vuelta 4
Vuelta 5
Vuelta 6
Vuelta 7
Vuelta 8
Vuelta 9

Con los while, hay que tener la precaución de no realizar un «bucle infinito», que consiste en un bucle que nunca termina por un error en la programación. Een el caso anterior, esto ocurriría si no hubiéramos puesto la línea vuelta=vuelta+1.

for en Python

En ocasiones, tenemos que repetir varias veces una determinada tarea hasta conseguir nuestro objetivo. En Python esto se realiza con el comando for. A modo de ejemplo for en Python se usa así:

>>> for vuelta in range(1,10):
>>>     print("Vuelta "+str(vuelta))
Vuelta 1
Vuelta 2
Vuelta 3
Vuelta 4
Vuelta 5
Vuelta 6
Vuelta 7
Vuelta 8
Vuelta 9

En el caso del for, no es posible realizar un bucle infinito.

Como se puede ver en el anterior ejemplo, range genera una secuencia de números desde 1 hasta 10.

for se puede utilizar con cualquier objeto con el que se pueda iterar (ir saltando de elemento en elemento), como verás en este ejemplo con una lista:

>>> coches = (‘Ferrari’, ‘Tesla’, ‘BMW’, ‘Audi’)
>>> for coche in coches:
>>>     print(coche)

Ferrari
Tesla
BMW
Audi

Si lo combinas con la función enumerate, además irá dándole un número a cada elemento:

>>> coches = ('Ferrari', 'Tesla', 'BMW', 'Audi')
>>> for i, coche in enumerate(coches):
>>>    print(str(i) + " - "+ coche)

0 - Ferrari
1 - Tesla
2 - BMW
3 - Audi
Prueba

Si te ha gustado compártelo:

  • Haz clic para compartir en Facebook (Se abre en una ventana nueva)
  • Haz clic para compartir en Twitter (Se abre en una ventana nueva)

Comentarios

  1. jose luis dice

    1 octubre, 2016 a las 1:21 am

    en este ejemplo podríamos decir que genera 9 vueltas o ciclos?

    Responder
    • jaime dice

      1 octubre, 2016 a las 7:25 am

      Hola José Luis,
      Efectivamente se dan 9 vueltas.

      Responder
    • Quimbo dice

      3 noviembre, 2017 a las 12:06 pm

      Si! O también llamadas Iteraciones.

      Responder
  2. carlos dice

    11 noviembre, 2017 a las 9:09 am

    for i in range(3-1,-1,-1):
    print(I)
    tengo una duda que hacen exactamente esos -1 despues de la coma
    gracias

    Responder
    • jaime dice

      11 noviembre, 2017 a las 8:42 am

      Hola Carlos,
      El primer término es la resta de 3-1, por lo que equivale a:
      range(2,-1,-1)

      El segundo término es hasta donde tiene que contar, en este caso hasta -1.

      El tercer término es el paso (de cuanto en cuanto queremos ir).

      Juntando todo, queremos una lista de números que vaya desde 2 hasta -1, dando «pasitos» de -1.

      range(2,-1,-1) devuelve:
      [2, 1, 0]

      Responder
  3. Pablo Castillo dice

    19 julio, 2018 a las 12:32 am

    Pregunta rápida, la única forma de usar el comando for es con range(X,Y) o hay distintas formas de utilizar ese comando.
    Gracias de antemano. ^^

    Responder
    • jaime dice

      19 julio, 2018 a las 8:39 am

      Hola Pablo,
      for admite cualquier elemento que sea «iterable», como por ejemplo una lista:
      coches = (‘Ferrari’, ‘Tesla’, ‘BMW’, ‘Audi’)
      for coche in coches:
      print(coche)

      Otra función que puede usarse y me parece mágica es la de ennumerate, que genera dos variables, una con el índice y otra con el valor de la lista:
      for i, coche in enumerate(coches):
      print(str(i) + » – «+ coche)

      Voy a incluirlo en el artículo por si alguien más tiene la misma duda.

      Responder
      • Pablo Castillo dice

        21 julio, 2018 a las 3:24 am

        Muchas gracias por tu respuesta, me parece genial que aún después de tanto tiempo sigas tomándote el tiempo de responder todas las dudas que puedan tener las personas que leyeron tu post.

        Responder
        • jaime dice

          24 julio, 2018 a las 10:19 am

          Muchas gracias Pablo por tus palabras.

          Desde que conocí Python (hace ya unos cuantos años), me ha parecido un lenguaje «mágico».

          Creo que es un excelente lenguaje para aprender a programar, y me encanta ayudar a que otras personas también lo conozcan y descubran su potencial.

          Responder
          • Francisco dice

            18 mayo, 2019 a las 2:47 pm

            Buenas,

            Lo que no entiendo yo es en qué momento python sabe que coche son los elementos de la lista coches… no sé si me explico.

            Muchas gracias por este magnífico tutorial, Jaime!

          • jaime dice

            18 mayo, 2019 a las 7:53 pm

            Hola Francisco,
            coche es simplemente como quieres que python llame a cada elemento de la lista. Python realmente no sabe lo que es, podrías llamarla por ejemplo «gallina» y funcionaría igual:
            for gallina in coches:
            print(gallinad)

    • Gustavo Alejandro García dice

      10 mayo, 2020 a las 1:50 pm

      Como se podria generar una tupla de n elementos con un ciclo for, en el cual permita al usuario ir cargando los elementos??

      Responder
  4. barito dice

    30 julio, 2018 a las 4:30 am

    porque en el ejemplo no se imprime el numero 10?
    que hacer para que también imprima el numero 10?

    Responder
    • jaime dice

      30 julio, 2018 a las 7:05 am

      Hola barito,
      en el ejemplo no se imprime el número 10 porque en el comando while hemos indicado que vaya sumando 1 siempre que el número sea menor que 10.

      Si quieres imprimir el 10, bastaría por cambiar el while por cualquiera de estos dos:
      1.- >>> while vuelta <= 10: 2.- >>> while vuelta < 11:

      Responder
  5. Jefferson dice

    12 septiembre, 2018 a las 3:32 pm

    ¿se pueden sumar los resultados de las vueltas o sea 1+2+3+..+9?

    Responder
    • jaime dice

      12 septiembre, 2018 a las 4:08 pm

      Hola Jefferson,
      se puede sin más que incluir una variable que vaya llevando la cuenta:

      >>> cnt=0
      >>> for vuelta in range(1,10):
      >>> ····print("Vuelta "+str(vuelta))
      >>> ····cnt=cnt+vuelta
      >>> print(cnt)
      Vuelta 1
      Vuelta 2
      Vuelta 3
      Vuelta 4
      Vuelta 5
      Vuelta 6
      Vuelta 7
      Vuelta 8
      Vuelta 9
      45

      Responder
      • Nicolas dice

        26 julio, 2019 a las 1:53 am

        Hola, no se puede poner cnt +=vuelta???

        Responder
        • jaime dice

          26 julio, 2019 a las 4:25 am

          Hola Nicolas,
          efectivamente, también se puede hacer como propones.

          Responder
  6. Rebeca C dice

    11 octubre, 2018 a las 4:16 pm

    Hola
    Me encantó como explicas todo!! se entiende muy bien.
    Qué página recomiendas para ejercitar ciclo for, ciclo while, ruteo y listas?

    Saludos

    Responder
    • jaime dice

      15 octubre, 2018 a las 5:01 pm

      Muchas gracias Rebeca.
      Si ya has instalado python, personalmente probaría a ejercitar directamente en jupyter.

      Responder
  7. Astrid Rodriguez dice

    26 octubre, 2018 a las 5:12 am

    Necesito ayuda con un programa: Escribir un programa para contar el número de pares e impares presentes en una lista de números. Ejemplo
    numeros= [1, 2, 3, 4, 5, 6, 7, 8, 9]
    Salida:​
    Pares: 5
    Impares : 4
    Llevo rato dandole vuelta y no consigo hacerlo:(

    Responder
    • jaime dice

      26 octubre, 2018 a las 5:42 am

      Hola Astrid,
      ¿no estaremos resolviendo los ejercicios de programación de la Escuela Superior Politécnica del Litoral? Para aprender a programar es indispensable que cada uno internamente encuentre la solución.
      Como pista, para saber si es par o impar puedes comprobar el resto que se obtiene al dividir cada número entre dos. Para contarlos tienes que crear dos variables distintas que vas incrementando cada vez que encuentres un número par o impar.

      Responder
  8. Melissa dice

    3 noviembre, 2018 a las 7:59 pm

    buenas tardes.
    estoy haciendo un programa que me dira si la contraseña es de menor de 6 o mayor de 12 sera incorrecta. el caso que es si entiendo o tengo la idea de como lo voy a plantear pero me gustaria preguntarte ¿como puedo utilizar mi variable (si es alfanumerica) para decir que hay menos o mas caracteres?.

    contraseña = » usuario261743″
    if contraseña < 12 : (segun yo aqui esta el error)
    print ("la contraseña debe contener menos de 12 caracteres")

    Responder
    • jaime dice

      3 noviembre, 2018 a las 11:14 pm

      Hola Melissa,
      para saber la longitud de un texto, tienes que usar el comando len.

      if len(contrasena) > 12:
      ····print("la contraseña debe contener menos de 12 caracteres")

      Responder
      • HilMa dice

        28 febrero, 2019 a las 4:18 am

        como se haria entonces si quiero validar en la misma linea si es menos a 6 y mayor a 12?

        Responder
        • jaime dice

          10 marzo, 2019 a las 1:23 pm

          Hola HilMa,
          tienes que juntar ambas condiciones:
          if len(contrasena)<6 and len(contrasena)>12:
          ····print "La contraseña debe contener entre 6 y 12 caracteres"

          Aunque en la práctica nunca se va a dar el caso, ya que ningún número es a la vez menor de 6 y mayor de 12, por lo que supongo que te refieres a que sea mayor de 6 y menor de 12.

          Responder
  9. Nicolas dice

    19 noviembre, 2018 a las 3:16 am

    Hola, me podrias decir como se interpreta cuando antes de la palabra for, hay una palabra, es decir la instruccion del for inicia con una palabra antes, pero no se como interpretarlo, si esa palabra es una variable o que es

    Responder
    • jaime dice

      19 noviembre, 2018 a las 7:17 pm

      Hola Nicolás,
      ¿podrías escribir un ejemplo de a qué te refieres?

      Responder
      • raul dice

        8 marzo, 2019 a las 7:22 pm

        hola tengo una consulta me sale este tipo de error cuando quiero imprimir :
        >>> ss=0
        >>> while ss >> … File «», line 2
        print(«ss «+str(ss))
        ^
        IndentationError: expected an indented block
        >>> File «», line 1
        ss = ss + 1
        ^
        IndentationError: unexpected indent

        Responder
        • jaime dice

          8 marzo, 2019 a las 9:09 pm

          Hola Raul,
          como sabes python es muy crítico con los tabuladores (o espacios) para ordenar el código. En tu caso no estás respetando los tabuladores o espacios que estás introduciendo en el programa y por eso te da ese error.

          Responder
  10. Bryan dice

    26 marzo, 2019 a las 10:59 pm

    Por ejemplo, en el libro de Robert McCloskey Make Way for Ducklings (Dejad paso a los patitos), los nombres de los patitos son Jack, Kack, Lack, Mack, Nack, Ouack, Pack, y Quack. Este bucle saca esos nombres en orden:

    prefijos = «JKLMNOPQ»
    sufijo = «ack»

    for letra in prefijos: print letra + sufijo

    La salida del programa es:
    Jack
    Kack
    Lack
    Mack
    Nack
    Oack
    Pack
    Qack

    Por supuesto, esto no es del todo correcto, porque “Ouack” y “Quack” no estan correctamente escritos.
    Como ejercicio, modifique el programa para corregir este error.

    Este es un ejercicio del libro que no pude resolver. Queria saber si podias ayudarme.

    Responder
    • jaime dice

      27 marzo, 2019 a las 2:30 pm

      Hola Bryan,
      el programa que has puesto funcionaría perfectamente. ¿Qué problema tienes con él?

      Responder
      • Bryan dice

        27 marzo, 2019 a las 5:12 pm

        Corregir «O» en «Ou» para que tenga el nombre Ouack, y no «Oack» lo mismo en la letra «Q»

        Responder
        • jaime dice

          27 marzo, 2019 a las 5:31 pm

          Podrías hacerlo definiendo una lista con los inicios que quieras:
          prefijos = ['J','K','L', 'M', 'N', 'Ou', 'P', 'Qu']

          Otra posibilidad es poner un if dentro del bucle para que te cambie el valor:
          if (letra=='O') or (letra=='Q'): letra = letra + 'u'

          Responder
          • Bryan dice

            27 marzo, 2019 a las 6:42 pm

            Muchas gracias… Aunque el primer consejo toma tambien en cuenta los «Tab» y las » , «.. Quiero decir que lo toma tambien en cuenta como una «Letra» como si hubieran mas.. por ej:
            ack
            ,ack

            El segundo consejo es mas completo.. Muchas gracias por tu ayuda..

          • jaime dice

            27 marzo, 2019 a las 7:19 pm

            Hola Bryan,
            Es posible que haya un poco de confusión con el tipo de comillas y por eso no te funcionara el primer método.
            Puedes echarle un vistazo aquí. (Tienes que darle a run cuando se abra la ventana).

          • Bryan dice

            27 marzo, 2019 a las 8:18 pm

            Ya lo hice! Gracias por ayudarme a resolverlo!. Feliz Noche.

  11. Adrián dice

    17 abril, 2019 a las 10:58 am

    Hola quiero realizar un programa que realice con un excel hacer un separador es decir tengo lo siguiente en el excel:
    267468;555|01;98|89;66
    me gustaría hacer un bucle que se recorra 10 veces la primera parte porque son 10 valores de 6 dígitos y 5 la segunda porque son 5 valores de dos dígitos.

    Responder
    • jaime dice

      17 abril, 2019 a las 11:24 am

      Hola Adrián,
      al ser valores separados por punto y coma (;), lo suyo es partir la cadena (split()) con los punto y coma.

      También puedes usar la biblioteca csv que es específica para importar este tipo de archivos.

      Responder
  12. Victor Hernandez dice

    12 junio, 2019 a las 11:09 am

    Hola, he creado mi primer Script o programa en Phtyon , es un generador de contraseñas, y me gustaria hacer que una vez se ejecute y te genere las contraseñas vuelva al principio del códgio. Dejo el código

    #!/bin/python3
    «Programa en Phyton generador de contraseñas»
    «Hacemos que el programa selecione un caracter alatorio mediante el moidulo radom»
    import random
    print(»’ Generador de Contraseñas»’)

    chars =’ab[email protected]£$%^&*().,?0123456789′
    «Vamos a pedir al usuario que intorduzca el numero de Contaseñas»
    number = input (‘Nú1mero de contraseñas?’)
    number = int(number)
    «Lo hacemos con la variable numero»

    «Vamos a pedir que intorduzca una longitud de Contaseña, lo guarda en la variable lenght»
    length = input(‘longitud de contraseña?’)
    lenght = int(length)

    «Ahora hacemos que el caracter selecionado lo gaurde en una variable llamda password»
    password =»
    for c in range(lenght):
    password += random.choice(chars)
    «Con la linea anterior nos va a mostrar una contraseña la logintud introducida por el usuario»
    «Con el comando print lo imprime en pantalla»
    print (»’ Su contraseña es»’)
    print(password)

    Responder
    • jaime dice

      12 junio, 2019 a las 6:13 pm

      Hola Victor,
      la manera de hacerlo es poner un «while True:» al principio del script.

      De este modo se repite todo el rato el script.

      Responder
  13. rodolfo dice

    31 julio, 2019 a las 5:12 pm

    Hola al hacer este ejemplo:

    coches = (‘Ferrari’, ‘Tesla’, ‘BMW’, ‘Audi’)
    for coche in coches:
    print(coche)

    en Jupyter 3.7 me sale este error:

    File «», line 1
    coches = (‘Ferrari’, ‘Tesla’, ‘BMW’, ‘Audi’)
    ^
    SyntaxError: invalid character in identifier

    que podra ser? Gracias de antemano

    Responder
    • jaime dice

      31 julio, 2019 a las 5:49 pm

      Hola Rodolfo,
      el problema es que estás usando un acento en vez de una comilla. A veces pasa que Word, e incluso en páginas web se le dan formato a las comillas para que queden más «bonitas», pero no son compatibles con los lenguajes de programación.
      Si cambias las comillas que estás usando por comilla recta (‘) o doble («), debería funcionarte.

      Responder
  14. Carlos Alberto dice

    6 noviembre, 2019 a las 10:29 pm

    Hola Jaime, un placer leer tus clases y comentarios.
    Mi consulta es la siguiente.

    Estoy haciendo un monitoreo de red y necesito scanear 2 rangos de IP,
    de 10.10.0.30 al 10.10.0.40 y del 10.10.0.230 al 10.10.0.240

    e intente esto

    for n in range (31, 41):#rango de switches
    sw_ip=»10.10.0.{0}».format(n) # IP de switches sobre el que iteratua «n»
    y aca el codigo que corresponde

    Sin embargo necesito scanear el otro rango SIN usar otro for, intente

    for n in range (30, 40) and (230, 240):

    pero SOLo toma el segundo rango

    si hago

    for n in range (30, 40) or (230, 240):

    toma solo el primer rango

    es posible hacer que solo ejecute el codigo EN los dos rangos= sin pasar desde 41 hasta 240?

    porque obviamente asi for n in range (30, 240) si funciona pero pierde intentos (estoy haciendo PING importando socket y os)

    Gracias por tu tiempo y ayuda.

    Responder
    • jaime dice

      6 noviembre, 2019 a las 10:49 pm

      Hola Carlos,
      es una pregunta muy interesante.

      Hay varias formas de hacerlo. Una podría ser convertir los rangos en listas y luego juntarlos:
      for n in (list(range(30, 41)) + list(range(230, 241))):
      sw_ip="10.10.0.{0}".format(n)

      Aunque otra más elegante sería aprovechar que los dos rangos tienen la misma longitud para generar las dos ips:
      for n in range(30, 41):
      sw_ip_1="10.10.0.{0}".format(n)
      sw_ip_2="10.10.0.{0}".format(n+200)

      Responder
      • Carlos Alberto dice

        6 noviembre, 2019 a las 11:38 pm

        ahhhh, increible, estaba tan pasado que no podia verlo.

        Te agradezco enormemnte la ayuda, lo estaba pensando del modo equivocado.

        Esto me abre la cabeza para ampliar aun mas el mini proyecto de monitoreo,

        Enorme abrazo!

        Gracias

        Responder
  15. Daniel dice

    21 noviembre, 2019 a las 4:18 am

    Hola. Para iniciar un juego arroja un dado cada uno de los dos jugadores e inicia el que saque el numero mayor. El punto es cuando los dos sacan el mismo, deben volver a tirarlos hasta que uno sea mayor. No logro hacer ese bendito bucle (seguro es muy simple..). Desde ya agradecido.

    J1 = input(«Jugador 1: «)
    J2 = input(«Jugador 2: «)

    print(«\nAmbos jugadores van a tirar el dado para ver quien empieza primero»)
    sleep(2)

    dad1 = randint(1, 6)
    dad2 = randint(1, 6)

    print(«\n», J1, «saco: «, dad1)
    sleep(2)
    print(«\n», J2, «saco: «, dad2)
    sleep(2)

    if dad1 > dad2:
    print(«\n¡», J1, «comienza comienza el juego!»)
    elif dad1 < dad2:
    print("\n¡", J2, "comienza comienza el juego!")
    else:
    print("\nVuelvan a tirar los dados porque les salio el mismo numero")

    Responder
    • jaime dice

      22 noviembre, 2019 a las 7:42 am

      Hola Daniel,
      puedes usar dos aproximaciones:
      – Hacer un bucle while permanente (while true ) que puedes romper con el comando break cuando los dos números no sean iguales.
      – Hacer que dad1 y dad2 tengan el mismo valor, y luego poner un while dad1 == dad2. En el momento que dejen de ser iguales, el while no se repetirá.

      Responder
  16. Felipe Figueroa dice

    4 marzo, 2021 a las 7:34 pm

    Deseo hacer juegos en Python usando las li brerias de Pygame pero, de principio no logro que Python 9 logre vincular a Pygame. ¿Cuál sería la forma apropiarda para lograrlo? Gracias por la respuesta cuando me envies.

    Responder
    • jaime dice

      7 marzo, 2021 a las 2:38 pm

      Hola Felipe,
      lo primero sería instalar Pygame con pip o anaconda y luego importarlo en el script

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Tabla de contenidos

  • Curso básico
    • Instalar Python
    • 1 Comentarios
    • 2 Variables
    • 3 Listas
    • 4 Condicionales
    • 5 Bucles
    • 6 Módulos
Para darte un servicio más personalizado, esta web utiliza cookies propias y de terceros. Si sigues navegando, entendemos que aceptas su uso según nuestra política de cookies. Aceptar Leer más
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR