Python – Capítulo 8: La estructura "while"

Objetivo: presentar la estructura de control while en Python para la repetición de un bloque de instrucciones en tanto y cuanto se cumpla determinada condición.

Supongamos que tenemos un determinado conjunto de instrucciones que queremos repetir en bucle siempre que se cumpla cierta condición. Python resuelve esto a través de la estructura while (que significa mientras, en inglés).

La filosofía es sencilla: mientras se cumpla una condición dada, repite un conjunto de instrucciones.


while condición:
    instrucción 1
    instrucción 2
    instrucción n

Recuerda que la forma que tiene Python para delimitar los bloques de instrucciones es a través de su indentación.

¿Cómo funciona el bucle while?

Se evalua la condición al comienzo del bucle. Si es verdadera, True, el conjunto completo de instrucciones indentadas se ejecuta. Una vez concluido, volvemos arriba y reevaluamos nuevamente la condición. Si sigue siendo cierta, repetimos de nuevo el bucle.

Y así sucesivamente. En el momento en el que la evaluación al comienzo sea falsa, False, el bucle dejará de ejecutarse y el programa saltará a la siguiente instrucción fuera de él.

Recuerda el programa del artículo anterior:


valor = input('Introduce un número del 1 al 6: ')
if int(valor) == 1:
    print('El dado rueda..., ha salido el UNO')
elif int(valor) == 2:
    print('La suerte está echada..., ha salido el DOS')
elif int(valor) == 3:
    print('El dado nos muestra... un TRES')
elif int(valor) == 4:
    print('Increíble pero cierto... ha salido un CUATRO')
elif int(valor) == 5:
    print('Si esto fuera el parchís sacarías ficha. Ha salido el CINCO')
elif int(valor) == 6:
    print('Enhorabuena, has sacado el valor más alto del dado, el SEIS')
else:
    print('Lo siento, el dado no puede devolver ese valor')

Se nos requería la introducción de un número y, si este correspondía a una cara del dado (valor entre uno y seis), nos mostraba su valor. En el caso de que el número no estuviese en el rango adecuado, nos instaba a que volviéramos a intentarlo y el programa concluía. Pero volver a intentarlo implicaba volver a lanzar el programa de nuevo.

El programa siguiente lo hemos mejorado para que no haya que volver a ejecutarlo en el caso de que no se introduzca un valor adecuado:


valor = int(input('Introduce un número del 1 al 6: '))
while valor<1 or valor>6:
    print("Por favor, el número ha de ser un número entre el uno y el seis.")
    valor = int(input('Introduce un número del 1 al 6: '))
if valor == 1:
    print('El dado rueda..., ha salido el UNO')
elif valor == 2:
    print('La suerte está echada..., ha salido el DOS')
elif valor == 3:
    print('El dado nos muestra... un TRES')
elif valor == 4:
    print('Increíble pero cierto... ha salido un CUATRO')
elif valor == 5:
    print('Si esto fuera el parchís sacarías ficha. Ha salido el CINCO')
elif valor == 6:
    print('Enhorabuena, has sacado el valor más alto del dado, el SEIS')

Observemos el bucle while, justo desde la línea anterior a él:


valor = int(input('Introduce un número del 1 al 6: '))
while valor<1 or valor>6:
    print("Por favor, el número ha de ser un número entre el uno y el seis.")
    valor = int(input('Introduce un número del 1 al 6: '))

Justo antes del while le pedimos al usuario que introduzca el valor, que inmediatamente después cotejaremos.


valor = int(input('Introduce un número del 1 al 6: '))

Observa, como diferencia respecto al programa anterior, que esta vez hemos utilizado la función int() directamente en la captura de input(), de modo que la variable valor ya contiene un entero y no será necesaria su posterior conversión en cada elif.

Llegamos al fin a la condición del bucle while:

while valor<1 or valor>6:

Queremos que, si el valor no se corresponde con una tirada del dado, nos lo diga y, además, vuelva a ofrecernos el mensaje incitándonos a introducir otro diferente, labor de la que se ocuparán las dos instrucciones del bloque.

Si el número entero introducido no está en el rango entre uno y seis significa que, o bien es menor que uno, o bien es mayor que seis. Eso es lo que muestra la condición. El operador lógico or devuelve True cuando cualquiera de los dos operandos que están a su lado es verdadero. El bucle se repetirá continuamente hasta que introduzcamos un valor adecuado. Sólo entonces la condición será False y podremos seguir con las instrucciones if posteriores.

Nada más por hoy. Dispones de una herramienta poderosa para el control de flujo de tus programas en Python. Experimenta con ella y asegúrate de comprenderla con claridad antes de proseguir con contenidos más avanzados.

Javier Montero Gabarró


Fecha de la última revisión: 12 de agosto de 2012


http://elclubdelautodidacta.es/wp/2011/06/python-capitulo-8-la-estructura-while/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

6 opiniones en “Python – Capítulo 8: La estructura "while"”

  1. Hola Javier!
    Me encantan las entradas sobre python de tu web.
    Respecto al programa de este artículo debo decirte que tiene algún error.
    Tal y como lo has codificado aquí, si introduces un número dentro del rango correcto desde el principio, nunca entrarás al bucle y por tanto no evaluará el valor ni sacará por pantalla ninguna de las frases.
    Lo he modificado un poco para que funcione de la forma esperada.
    No me atrevo a ponerte aquí el código completo (además, es casi igual al tuyo) así que te pongo el enlace al pastebin 😉
    http://pastebin.com/embed_js.php?i=chnYfu4A

    1. ¡Qué tal, Rodrigo!
      El programa funciona correctamente tal como está. Presta mucha atención a la indentación. Los if están indentados al mismo nivel que el while, por lo que están fuera de él.
      Sólo hay que entrar en el while si el número indicado está fuera del rango permitido. 😉

  2. Hola Javier, una duda de principiante (que es lo que soy, jeje…)
    en este código:

    w=1
    while w==1:
    a=88
    print(a)
    print(“introduce nuevo valor de w: “)
    w=input()
    print(“w vale “,w)

    ¿porque no repite el ciclo si le vuelvo a dar el valor 1 a w?

    Gracias.

Deja un comentario