4.2 Bucles
Cuando queremos hacer algo más de una vez, necesitamos recurrir a un bucle. En esta sección veremos las distintas sentencias en Python que nos permiten repetir un bloque de código.
El primer mecanismo que existe en Python para repetir instrucciones es usar la sentencia while. La semántica tras esta sentencia es: «Mientras se cumpla la condición haz algo». Veamos un sencillo bucle que muestra por pantalla los números del 1 al 4:
Ejecución paso a paso a través de Python Tutor:
https://cutt.ly/RgM2HYn
La condición del bucle se comprueba en cada nueva repetición. En este caso chequeamos que la variable value sea menor o igual que 4. Dentro del cuerpo del bucle estamos incrementando esa variable en 1 unidad.
Romper un bucle while
Python ofrece la posibilidad de romper o finalizar un bucle antes de que se cumpla la condición de parada. Supongamos un ejemplo en el que estamos buscando el primer número múltiplo de 3 yendo desde 20 hasta 1:
Ejecución paso a paso a través de Python Tutor:
Como hemos visto en este ejemplo, break nos permite finalizar el bucle una vez que hemos encontrado nuestro objetivo: el primer múltiplo de 3. Pero si no lo hubiéramos encontrado, el bucle habría seguido decrementando la variable num hasta valer 0, y la condición del bucle while hubiera resultado falsa.
Comprobar la rotura
Nivel intermedio
Python nos ofrece la posibilidad de detectar si el bucle ha acabado de forma ordinaria,
esto es, ha finalizado por no cumplirse la condición establecida. Para ello podemos hacer uso de la sentencia else como parte del propio bucle. Si el bucle while finaliza normalmente (sin llamada a break) el flujo de control pasa a la sentencia opcional else.
Veamos un ejemplo en el que tratamos de encontrar un múltiplo de 9 en el rango [1, 8] (es obvio que no sucederá):
Ejecución paso a paso a través de Python Tutor:
Continuar un bucle
Nivel intermedio
Hay situaciones en las que, en vez de romper un bucle, nos interesa saltar adelante hacia la siguiente repetición. Para ello Python nos ofrece la sentencia continue que hace precisamente eso, descartar el resto del código del bucle y saltar a la siguiente iteración.
Veamos un ejemplo en el que usaremos esta estrategia para mostrar todos los números en el rango [1, 20] ignorando aquellos que sean múltiplos de 3:
Ejecución paso a paso a través de Python Tutor:
Bucle infinito
Si no establecemos correctamente la condición de parada o bien el valor de alguna variable está fuera de control, es posible que lleguemos a una situación de bucle infinito, del que nunca podamos salir. Veamos un ejemplo de esto:
El problema que surje es que la variable num toma los valores 1, 3, 5, 7, 9, 11, … por lo que nunca se cumple la condición de parada del bucle. Esto hace que repitamos «eternamente» la instrucción de incremento.
Ejecución paso a paso a través de Python Tutor:
Una posible solución a este error es reescribir la condición de parada en el bucle:
Truco: Para abortar una situación de bucle infinito podemos pulsar en el teclado la combinación CTRL-C. Se puede ver reflejado en el intérprete de Python por KeyboardInterrupt.
Ejercicio
Escriba un programa que encuentre la mínima secuencia de múltiplos de 3 (distintos) cuya suma sea igual o superior a un valor dado.
Ejemplo
- Entrada: 45
- Salida: 0, 3, 6, 9, 12, 15