Lección 10 de 12 · Lectura y práctica
Bucles: for y while
CONCEPTO CLAVE: Los bucles son estructuras de control que permiten repetir un bloque de código múltiples veces sin necesidad de escribirlo repetidamente. Son fundamentales en programación para automatizar tareas repetitivas y.
Del concepto a la práctica
Taller de esta lección
for recorre una colección conocida; while repite mientras una condición siga siendo verdadera. Elegir uno u otro depende de si ya conoces los elementos que procesarás o necesitas esperar una condición de salida.
Ejemplo resuelto
pendientes = [2, 0, 5]
total = 0
for dias in pendientes:
total += dias
print(total)La salida es 7 porque se acumulan los tres registros. Un while sería adecuado para repetir un menú hasta recibir una opción de salida.
Pruébalo
Sustituye la lista por
[1, 3, 4].Ejecuta y suma los valores manualmente.
Añade un contador de registros.
Comprueba que el contador coincide con la lista.
Error frecuente: crear un while sin modificar la variable de control. Corrección: actualiza el contador o define una salida explícita para evitar un ciclo infinito.
Comprueba tu resultado
Con [1, 3, 4], total debe ser 8 y el contador 3. Después escribe un while que imprima 1, 2 y 3; debe terminar cuando el contador llegue a 4, sin imprimir 4.

Mapa de prácticaUna condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.
Ver la infografía en tamaño completo ↗¿Qué son los Bucles y por qué son importantes?
Imagina que tienes que imprimir los números del 1 al 100 en la pantalla. Sin bucles, tendrías que escribir print() cien veces. Los bucles resuelven este problema permitiéndote ejecutar el mismo código tantas veces como necesites con solo unas pocas líneas.
Bucle for: Iterando sobre Secuencias
El bucle for en Python se utiliza para iterar sobre elementos de una secuencia (como listas, cadenas de texto, tuplas o rangos). La sintaxis es sencilla y legible:
for variable in secuencia:
# código a ejecutar en cada iteraciónEjemplo básico: Recorrer una lista
# Lista de frutas
frutas = ["manzana", "banana", "cereza", "durazno"]
for fruta in frutas:
print(fruta)Salida:
manzana
banana
cereza
duraznoEn este ejemplo, la variable fruta toma el valor de cada elemento en cada iteración. No necesitas preocuparte por los índices, Python lo maneja automáticamente.
Usando range() para secuencias numéricas
La función range() genera una secuencia de números que es perfecta para bucles for:
# Imprimir números del 0 al 4
for i in range(5):
print(f"Número: {i}")
# Números del 1 al 10
for i in range(1, 11):
print(i)
# Números pares del 0 al 10
for i in range(0, 11, 2):
print(i)range(inicio, fin, paso) permite especificar el inicio, el final (no inclusivo) y el paso. Si omites el inicio, comienza en 0. Si omites el paso, usa 1 por defecto.Iterando sobre cadenas de texto
palabra = "Python"
for letra in palabra:
print(letra)
# Salida: P, y, t, h, o, n (cada letra en una línea)Usando enumerate() para obtener índice y valor
colores = ["rojo", "verde", "azul", "amarillo"]
for indice, color in enumerate(colores):
print(f"Índice {indice}: {color}")
# Salida:
# Índice 0: rojo
# Índice 1: verde
# Índice 2: azul
# Índice 3: amarilloBucle while: Repetición condicional
El bucle while ejecuta un bloque de código mientras una condición sea verdadera. Es ideal cuando no sabes exactamente cuántas veces necesitas repetir algo:
while condición:
# código a ejecutar
# siempre debe haber algo que actualice la condiciónFalse, el bucle se ejecutará indefinidamente, creando un bucle infinito. Siempre asegúrate de que la condición cambiará en algún momento.Ejemplo básico: Contador
contador = 0
while contador < 5:
print(f"Contador: {contador}")
contador += 1
print("¡Bucle terminado!")Salida:
Contador: 0
Contador: 1
Contador: 2
Contador: 3
Contador: 4
¡Bucle terminado!Ejemplo práctico: Validación de entrada
clave_correcta = "python123"
intentos = 0
max_intentos = 3
while intentos < max_intentos:
clave_ingresada = input("Ingresa la contraseña: ")
if clave_ingresada == clave_correcta:
print("¡Acceso concedido!")
break
else:
intentos += 1
print(f"Contraseña incorrecta. Intento {intentos} de {max_intentos}")
if intentos == max_intentos:
print("Has agotado tus intentos.")Control de Bucles: break y continue
Python proporciona dos palabras clave especiales para controlar el flujo de los bucles:
| Palabra clave | Descripción | Ejemplo de uso |
|---|---|---|
break | Termina el bucle inmediatamente | Salir de un bucle al encontrar un elemento |
continue | Salta a la siguiente iteración | Saltar elementos específicos |
Ejemplo con break
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for numero in numeros:
if numero == 6:
print("¡Encontré el 6! Terminando búsqueda.")
break
print(f"Revisando: {numero}")Ejemplo con continue
# Imprimir solo números impares
for i in range(1, 11):
if i % 2 == 0: # Si es par
continue # Saltar este número
print(i) # Imprimir solo imparesbreak cuando quieras salir del bucle completamente. Usa continue cuando quieras saltarte solo la iteración actual pero continuar con las siguientes.La Cláusula else en Bucles
Python permite agregar un bloque else después de un bucle. Este bloque se ejecuta únicamente cuando el bucle termina normalmente (sin usar break):
buscar = 7
numeros = [1, 2, 3, 4, 5]
for numero in numeros:
if numero == buscar:
print(f"¡Encontré el {buscar}!")
break
else:
print(f"No encontré el {buscar} en la lista")La cláusula else en bucles es una característica única de Python que no existe en la mayoría de los lenguajes de programación. Es especialmente útil para algoritmos de búsqueda.Bucles Anidados
Puedes colocar un bucle dentro de otro bucle. Esto es útil para trabajar con estructuras de datos bidimensionales como matrices:
# Tabla de multiplicar del 1 al 3
for i in range(1, 4):
print(f"Tabla del {i}:")
for j in range(1, 6):
print(f" {i} x {j} = {i * j}")
print()¿Cuándo usar for vs while?
Aquí tienes una guía para elegir el bucle adecuado:
| Situación | Bucle recomendado | Ejemplo |
|---|---|---|
| Iterar sobre una secuencia conocida | for | Recorrer una lista de nombres |
| Sabes cuántas veces repetir | for con range() | Ejecutar algo 10 veces |
| Repetir hasta que algo ocurra | while | Esperar input del usuario |
| No sabes cuándo terminará | while | Menú que se repite hasta elegir "salir" |
Ejercicios Prácticos
- Sumar números: Escribe un programa que sume todos los números del 1 al 100 usando un bucle
for. - Contar vocales: Pide al usuario una frase y cuenta cuántas vocales contiene usando un bucle.
- Adivina el número: Crea un juego donde la computadora genera un número aleatorio y el usuario debe adivinarlo, con pistas de "mayor" o "menor".
Ver más: Soluciones sugeridas
Solución Ejercicio 1:
total = 0
for i in range(1, 101):
total += i
print(f"La suma es: {total}")Solución Ejercicio 2:
frase = input("Ingresa una frase: ").lower()
vocales = "aeiouáéíóú"
contador = 0
for letra in frase:
if letra in vocales:
contador += 1
print(f"La frase tiene {contador} vocales")Errores Comunes y Cómo Evitarlos
while. Siempre verifica que tu condición cambiará.# ❌ INCORRECTO - Bucle infinito
contador = 0
while contador < 10:
print(contador)
# Falta: contador += 1
# ✅ CORRECTO
contador = 0
while contador < 10:
print(contador)
contador += 1range(), recuerda que el valor final no está incluido.# range(5) genera: 0, 1, 2, 3, 4 (no incluye 5)
# range(0, 5) genera lo mismo
# range(0, 5, 1) también genera lo mismofor item in lista en lugar de for i in range(len(lista)) siempre que puedas. Es más pitónico y legible.Comprensión de Listas (List Comprehensions)
Python ofrece una forma concisa de crear listas usando bucles. Las comprensiones de listas son muy populares entre los programadores de Python:
# Forma tradicional con bucle for
cuadrados = []
for i in range(1, 6):
cuadrados.append(i ** 2)
# Forma con list comprehension
cuadrados = [i ** 2 for i in range(1, 6)]
# Con condición: solo números pares
pares = [i for i in range(1, 11) if i % 2 == 0]
# Resultado: [2, 4, 6, 8, 10]Las list comprehensions son una característica muy apreciada de Python. Permiten escribir código más limpio y conciso, aunque para operaciones complejas es mejor stick con el bucle for tradicional.Resumen
| Concepto | Descripción |
|---|---|
for variable in secuencia | Itera sobre cada elemento de una secuencia |
while condición | Repite mientras la condición sea verdadera |
range(n) | Genera secuencia de 0 a n-1 |
range(inicio, fin) | Genera secuencia de inicio a fin-1 |
range(inicio, fin, paso) | Genera secuencia con incrementos de paso |
break | Sale del bucle inmediatamente |
continue | Pasa a la siguiente iteración |
else en bucles | Se ejecuta si el bucle termina sin break |
¿Cuál es la salida del siguiente código?
for i in range(3):
print(i)
else:
print("Fin")- A) 0 1 2 Fin
- B) 0 1 2 3 Fin
- C) Fin
- D) Error de sintaxis
range(3) genera 0, 1, 2. Luego se ejecuta el bloque else porque el bucle terminó normalmente.¿Qué bucle usarías si quieres que un usuario ingrese contraseñas hasta que acierte, sin saber cuántas veces tardará?
- A)
for i in range(1000) - B)
for password in passwords - C)
while True:conbreakcuando acierte - D) No se puede hacer con bucles
while True: con break cuando acierte. Cuando no sabes cuántas iteraciones necesitas, un bucle infinito con while True y break condicional es la solución ideal.Próximos Pasos
Ahora que dominas los bucles for y while, estás listo para aprender sobre:
- Funciones: Cómo crear tus propios bloques de código reutilizables
- Diccionarios: Otra estructura de datos importante para almacenar pares clave-valor
- Manejo de archivos: Cómo leer y escribir archivos usando bucles
Sigue con Introducción a la Programación con Python
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.