Bucles: for y while

Lectura
30 min~7 min lectura
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 procesar colecciones de datos.

¿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.

📌 Los bucles son uno de los pilares fundamentales de la programación. Casi todo programa que escribas contendrá al menos un bucle para resolver problemas del mundo real como procesar listas de usuarios, calcular totales, o esperar a que ocurra un evento.

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ón

Ejemplo básico: Recorrer una lista

# Lista de frutas
frutas = ["manzana", "banana", "cereza", "durazno"]

for fruta in frutas:
    print(fruta)

Salida:

manzana
banana
cereza
durazno

En 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)
💡 La sintaxis 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: amarillo

Bucle 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
    #必ず条件を更新する何かが必要
⚠️ ¡Peligro! Si la condición nunca se vuelve False, 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 claveDescripciónEjemplo de uso
breakTermina el bucle inmediatamenteSalir de un bucle al encontrar un elemento
continueSalta a la siguiente iteraciónSaltar 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 impares
💡 Usa break 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()
📌 Los bucles anidados son comunes en procesamiento de matrices, imágenes y datos tabulares. Ten cuidado con la indentación: cada nivel debe estar indentationado correctamente.

¿Cuándo usar for vs while?

Aquí tienes una guía para elegir el bucle adecuado:

SituaciónBucle recomendadoEjemplo
Iterar sobre una secuencia conocidaforRecorrer una lista de nombres
Sabes cuántas veces repetirfor con range()Ejecutar algo 10 veces
Repetir hasta que algo ocurrawhileEsperar input del usuario
No sabes cuándo terminaráwhileMenú que se repite hasta选择 "salir"

Ejercicios Prácticos

📌 Antes de continuar, te recomiendo fortemente que intentes resolver estos ejercicios por tu cuenta para reforzar el aprendizaje.
  1. Sumar números: Escribe un programa que sume todos los números del 1 al 100 usando un bucle for.
  2. Contar vocales: Pide al usuario una frase y cuenta cuántas vocales contiene usando un bucle.
  3. 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

⚠️ Bucle infinito: Olvidar incrementar la variable de control en un 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 += 1
⚠️ Índices fuera de rango: En bucles con range(), 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 mismo
💡 Consejo profesional: Cuando trabajes con listas, usa for 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

ConceptoDescripción
for variable in secuenciaItera sobre cada elemento de una secuencia
while condiciónRepite 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
breakSale del bucle inmediatamente
continuePasa a la siguiente iteración
else en buclesSe ejecuta si el bucle termina sin break
🧠 Quiz Final

¿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
✅ Respuesta correcta: A) 0 1 2 Fin. El bucle range(3) genera 0, 1, 2. Luego se ejecuta el bloque else porque el bucle terminó normalmente.
🧠 Quiz Final

¿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: con break cuando acierte
  • D) No se puede hacer con bucles
✅ Respuesta correcta: C) 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
📌 Recuerda: La práctica hace al maestro. No te limites a leer los ejemplos, ¡escríbelos y modifícalos! Experimenta con diferentes valores y observa los resultados. Eso es lo que hará que los conceptos se consoliden en tu mente.