Qué es un bucle y para qué sirve
Un bucle repite un trozo de código tantas veces como haga falta. En Python hay dos: for repite sobre una lista de valores y while repite mientras una condición se cumpla.
Sin bucles, sumar los gastos de un año serían 365 líneas. Con uno son tres.
Al final de esta lección
Nota
Puedo repetir un trabajo con bucles for y while.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Bucle | un bloque de código que se repite | |
| Iteración | una vuelta del bucle | |
| Acumulador | una variable que va sumando valores | total = total + 1 |
| range | una secuencia de números enteros seguidos | range(1, 4) |
| break | una orden que sale del bucle antes de tiempo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
for repite el bloque con cada valor
Escribe for, un nombre para el valor de cada vuelta, in, una lista y dos puntos. Las líneas con sangría se repiten una vez por valor.
Para sumar usa un acumulador: una variable que empieza en 0 y va creciendo en cada iteración.
Suma los gastos de una semana
# Suma los gastos de la semana con un bucle for.
total = 0
for spent in [12, 8, 15, 5]:
total = total + spent
print("Llevas", total, "euros")
print("Total de la semana:", total)
# Añade un gasto de 10 a la lista y ejecuta otra vez.
Ejemplo resuelto: la traza del bucle de gastos
| Vuelta | spent | total antes | total después |
|---|---|---|---|
| 1 | 12 | 0 | 12 |
| 2 | 8 | 12 | 20 |
| 3 | 15 | 20 | 35 |
| 4 | 5 | 35 | 40 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
range crea una serie de números
range(1, 4) da los números 1, 2 y 3. Empieza en el primero y se detiene antes del segundo. Con un tercer número, range(0, 10, 3), das el salto.
Con range puedes repetir algo diez veces sin escribir una lista de diez números.
Cuenta del 1 al 3 con range
python3 -c "for i in range(1, 4): print(i)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cuenta de 3 en 3
python3 -c "print(list(range(0, 10, 3)))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que range(1, 4) incluye el 4. No lo incluye: se para antes. Si quieres llegar hasta el 20, escribe range(1, 21).
Cuenta los múltiplos de 4
# Cuenta cuántos números del 1 al 20 son múltiplos de 4.
count = 0
for number in range(1, 21):
if number % 4 == 0:
count = count + 1
print(count)
# Cambia 4 por 3 y piensa antes qué saldrá.
while repite mientras la condición se cumpla
Un while pregunta antes de cada vuelta. Si la condición es True, ejecuta el bloque y vuelve a preguntar. Si es False, sigue por debajo.
Dentro del bloque debe cambiar algo que acabe haciendo False la condición. Si no, el bucle no termina nunca.
Gasta un saldo con un while
# Un saldo que baja hasta que no hay dinero para otro billete.
balance = 20
ticket = 1.5
trips = 0
while balance >= ticket:
balance = balance - ticket
trips = trips + 1
print(trips, "viajes y sobran", balance, "euros")
# Cambia ticket a 2 y calcula antes los viajes.
Escribe una cuenta atrás
printf 'n = 3\nwhile n > 0:\n print(n)\n n = n - 1\nprint("despegue")\n' > ~/cuenta.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta la cuenta atrás
python3 ~/cuenta.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
break sale y los bucles se anidan
La orden break sale del bucle en el momento en que se ejecuta. Sirve para parar cuando ya has encontrado lo que buscabas.
Un bucle dentro de otro se llama anidado. El de dentro hace todas sus vueltas por cada vuelta del de fuera.
Una tabla de multiplicar con dos números
python3 -c "for a in range(1, 4): print(a, a * 2, a * 3)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.