Bucles for y while
Repite acciones sobre secuencias y hasta que las condiciones cambien.
- Iterar sobre listas, cadenas y rangos con bucles for
- Usar bucles while para la repetición basada en condiciones
- Controlar el flujo del bucle con break, continue y pass
- Evitar los bucles infinitos
Las dos máquinas que repiten
Escribe un programa para sumar los primeros cien enteros y se te acalambran las manos. Los matemáticos abstrajeron la repetición en un símbolo mucho antes de que existieran las computadoras:
El signo es una instrucción de repetir. Un bucle es el de la computadora, y Python parte la idea en dos máquinas para dos clases de repetición. for repite sobre una secuencia conocida. while repite hasta que una condición deje de ser verdadera.
For: repetición sobre una secuencia
Un bucle for visita cada elemento de una secuencia, uno por ronda:
for fruit in ["apple", "banana", "cherry"]:
print(fruit)
# apple
# banana
# cherryLéelo como corre: “para cada fruta en la lista, haz esto.” La variable del bucle, fruit, toma un valor nuevo cada ronda hasta agotar la lista.
Las cadenas también son secuencias, los elementos son caracteres:
for letter in "Python":
print(letter)Como un carácter es un elemento único, la matemática y la máquina coinciden: iterar sobre una cadena de longitud corre exactamente rondas.
La secuencia numérica: range
La mayoría de las sumas van sobre números, así que Python ofrece range, una secuencia que puedes recorrer a saltos:
for n in range(5):
print(n) # 0 1 2 3 4range(5) produce la progresión aritmética , como el conjunto de índices de . Dos argumentos más le dan la forma que necesitas: range(start, stop, step) camina desde start, en pasos de step, deteniéndose antes de stop:
for n in range(10, 0, -2):
print(n) # 10 8 6 4 2Vale la pena enunciar la regla de parada con exactitud: viaja mientras (o con paso negativo), como un intervalo semiabierto .
While: repetición hasta una condición
Algunas tareas no pueden enumerar sus rondas de antemano, sigues hasta que alguna condición se voltea. La aproximación de Newton es el prototipo: refina hasta que el cambio encaje por debajo de una tolerancia. Eso es un bucle while:
count = 0
while count < 5:
print(count)
count += 1
# 0 1 2 3 4La condición está arriba y se reexamina cada ronda. Asegúrate de que con el tiempo se vuelva False, si nada en el cuerpo cambia las variables que lee la condición, el bucle no termina jamás. Una suma que debe terminar se escribe con for; una búsqueda que solo acaba al hallar su respuesta se escribe con while.
Break y continue
Dos palabras clave ajustan el flujo desde dentro.
break abandona el bucle de inmediato, sin importar cuántas rondas queden:
for n in [1, 3, 4, 7, 8]:
if n % 2 == 0:
print(f"Found even: {n}")
breakcontinue abandona solo esta ronda, saltando a la siguiente:
for n in range(6):
if n % 2 != 0:
continue
print(n) # 0 2 4Entre ellos caben en la recta numérica: break corta la cola ; continue excava un subconjunto de rondas, como filtrar una progresión con una criba.
Pass: un marcador vacío
Todo cuerpo de if, for, while y función necesita al menos una sentencia, pero a veces aún no la has escrito. pass es el no-op que ocupa el espacio:
for n in range(10):
if n % 3 == 0:
pass # TODO: handle multiples of 3 later
else:
print(n)No hace nada, que es precisamente su trabajo: mantener el bloque sintácticamente válido mientras se redacta la sentencia real.
Un ejemplo resuelto: la máquina Σ trabajando
Las herramientas de la lección se componen en el símbolo de suma de la apertura:
total = 0
for n in range(1, 11):
if n % 2 != 0:
continue # solo pares
total += n
print(total) # 2 + 4 + 6 + 8 + 10 = 30El bucle es mecanizado: cada vuelta suma un término, continue cuela las vueltas impares, y total se acumula igual que el total corrido de la lección 02.
Errores comunes
- Bucles
whileinfinitos. Olvida actualizar la variable que lee la condición y el bucle girará para siempre. Verifica que el cuerpo mueva el estado haciaFalse. - Modificar una lista mientras la iteras. Rebanar o borrar elementos a mitad de camino desplaza los índices bajo tus pies. Itera sobre una copia, o construye una lista nueva.
for i in range(len(items)). A menos que necesites el índice en sí, itera sobre la secuencia directamente,for fruit in fruitsdice lo que quieres.continuese salta la vuelta;breakabandona el bucle.continuese salta solo la iteración actual;breaktermina el bucle entero. Confundirlos es cómo un bucle que debía parar sigue girando.
🧩 Desafíos
🧩 Desafío, piensa primero, luego revela
Escribe un bucle for que imprima los primeros diez múltiplos de 3: .
💡 Respuesta: for i in range(3, 31, 3): print(i), range(3, 31, 3) empieza en 3, avanza de 3 en 3 y se detiene antes de 31, así que cae exactamente en $3, 6, \ldots, 30$.
🧩 Desafío, piensa primero, luego revela
Escribe un bucle while que recorra una cola (simúlala con una lista) y se detenga en el elemento "quit", imprimiendo cada elemento que pise.
💡 Respuesta: inputs = ["hello", "world", "quit"]; i = 0; while inputs[i] != "quit": print(inputs[i]); i += 1, la condición guarda el centinela y el índice mueve el estado hacia él.
🤔 Preguntas socráticas
- ¿Cuándo recurres a
whileen lugar defor? Da una tarea real para cada uno, una que puedas contar de antemano y otra que no. - ¿Qué le pasa a una lista que modificas mientras un bucle
forla recorre? ¿Cómo lo esquivas? - Python no tiene
do…whilecomo C. ¿Cómo escribes un cuerpo que debe correr al menos una vez antes de comprobar condición alguna?
✅ Comprobación rápida
1. ¿Qué imprime for i in range(0, 10, 3): print(i, end=" ")?
2. ¿Qué palabra clave salta el resto de la iteración actual del bucle?