El bucle while es otra estructura de control de flujo, concretamente lo que hace es repetir un código mientras dure una determinada condición.
Se puede decir que el bucle while se utiliza para hacer algo repetidamente, bajo unas condiciones específicas, sin saber cuantas veces se repetirá.
Representación gráfica
Al entrar en while, se evalúa la condición, si es verdadera el contenido del bucle se ejecutará una vez, pasada la ejecución volverá a comprobar la condición, si es verdad vuelve a entrar en el bucle (repetirá este ciclo indefinidamente), cuando la condición deje de cumplirse sale de él y continúa su ejecución.
La condición es cualquier expresión cuyo resultado solo puede ser verdadero o falso. Para realizar la condición se pueden incluir operadores de comparación de variables y también se pueden usar los conectores lógicos, exactamente igual que lo hacíamos con if.
Si esto lo ves en Pseudocódigo junto al formato en python:
El bloque de las instrucciones que se repetirán está definido mediante identación con respecto al bloque while. Recuerda que todas las sentencias deben tener la misma identación.
Con while se pueden hacer contadores como en el bucle for, pero con ciertas diferencias; ahora vas a contar del 0 al 10.
>>>i = 0
>>>while i < 11:
... print('cuento', i)
... i+=1
cuento 0
cuento 1
cuento 2
cuento 3
cuento 4
cuento 5
cuento 6
cuento 7
cuento 8
cuento 9
cuento 10
El funcionamiento del bucle es el siguiente:
Con while se puede hacer un control no solo sobre conteos, sino que se puede controlar otro tipo de condiciones, como puede ser un string.
salir = input('introduce una letra ') while salir != 'a': print('La letra no es la que busco') salir = input('introduce una letra ') print ('la letra es a, por eso salgo del bucle')
Copia este código en un fichero con extensión .py.
El nombre del fichero: ejemplo2_while.py y ejecútalo en el intérprete de python, recuerda en qué unidad estamos.
Prueba a lanzarlo varias veces. En una de ellas, introduce valores diferentes de 'a' y una vez con el valor igual a 'a'.
salir = input('introduce una letra ')
Almacenas un string escrito por el usuario en la variable salir.
while salir != 'a':
Entra en la sentencia mientras. Mientras la letra introducida sea distinta de 'a'.
print('La letra no es la que busco') salir = input('introduce una letra ')
El programa expresa por pantalla que no es la letra que busca y vuelve a solicitar otra por pantalla antes de terminar el bucle y volver a realizar la comprobación.
print ('la letra es la "a", por eso salgo del bucle')
Si se ejecuta esta sentencia es porque se ha salido del bucle, es decir la condición no se cumple, porque se ha introducido una letra 'a' por el teclado.
Con el bucle while, a diferencia del bucle for, no se sabe cuantas veces se va a ejecutar el contenido identado. Esto en determinados momentos puede ser muy positivo, pero si no lo manejas con cuidado puedes entrar en un bucle infinito, perdiendo así el control sobre el programa.
>>>i = 4
>>>while i ==4:
... print(i)
4
4
4
4
4
etc.
Al no modificar la variable de control siempre se dará una condición verdadera y nunca saldría del bucle.
Para interrumpir un bucle infinito, hay que pulsar la combinación de teclas Ctrl+C. Cuando se interrumpa el programa se mostrará un mensaje de error similar a este:
Traceback (most recent call last):
File "ejemplo.py", line 3, in <module>
print(i)
KeyboardInterrupt
En otras ocasiones puede ser muy útil el hecho de poder acceder a un bucle infinito, imagínate que quieres que se actualice la información de por ejemplo un titular web cada cierto tiempo, en ese caso disponer de un bucle infinito puede ser algo muy funcional.
Control de flujo, WHILE
En las ocasiones en las que un solo bucle no cumple con todas tus necesidades, puedes utilizar la estructura de bucles anidados, son útiles por ejemplo para recorrer o dibujar una matriz.
Cuando se habla de un bucle anidado, se hace referencia a que se puede tener un ciclo for dentro de otro ciclo for o un ciclo while dentro de otro while, uno de los ejemplos más claros, es el dibujar figuras utilizando asteriscos, como un cuadrado.
Ten en cuenta que para cada instancia del ciclo externo, el ciclo interno se debe realizar completamente.
Observa todo esto a través de un ejemplo:
columnas = int(input('Escribe el número de columnas:')) filas = int(input('Escribe el número de filas:')) while filas < 1 or columnas < 1: print('No empezamos bien... para dibujar un rectángulo no puedo usar números negativos') columnas = int(input('Escribe el número de columnas:')) filas = int(input('Escribe el número de filas:')) for i in range(1, filas + 1): for j in range(1, columnas + 1): print ('*', end = '') print('')
Copia este código en un fichero con extensión .py.
El nombre del fichero: ejemplo1_Anidados.py y ejecútalo en el intérprete de python, recuerda en qué unidad estamos.
Prueba a lanzarlo varias veces. Introduce valores diferentes a ver que resultados obtienes.
columnas = int(input('Escribe el número de columnas:')) filas = int(input('Escribe el número de filas:'))
Se piden dos números enteros por pantalla y se guardan en variables.
while filas < 1 | columnas < 1:
Se realiza una comprobación para saber si realmente se tiene un cuadrado o rectángulo que dibujar ya que sus lados deben ser positivos para poder dibujarlo.
print('No empezamos bien... para dibujar un rectángulo, no puedo usar números negativos') columnas = int(input('Escribe el número de columnas:')) filas = int(input('Escribe el número de filas:'))
Estas tres sentencias son las identadas dentro del while, es decir, se ejecutarán si el while es correcto, en este caso si alguno de los números es 0 o menor no se podría dibujar la figura y aparece un mensaje de aviso, a continuación se vuelven a pedir los números de fila y columna.
for i in range(1, columnas + 1): for j in range(1, filas + 1):
Es la estructura de un for anidado donde puedes ver como para cada instancia del ciclo externo, el ciclo interno se realiza completamente.
print ('*', end = '')
Esta sentencia lo que hace es escribir tantos asteriscos como el valor del segundo for, en este caso el de las filas, la función end='' lo que te permite es que no haya retorno de carro cada vez que se ejecuta este print y como separación incluye el contenido entre las comillas, en este caso un espacio en blanco pero podría ser otro carácter o caracteres.
print('')
Este es el print dentro del primer for, es decir, se ejecutará después de que el segundo bucle for se haya ejecutado todas las veces, cada vez.
Esta píldora formativa está extraída del Curso online de Iniciación a la programación en Python.
No pierdas tu oportunidad y ¡continúa aprendiendo!
Política de privacidad
ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.
Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".
Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies