Saltar al contenido principal

3.2 Bucles

Un bucle es una estructura de control que permite repetir un bloque de código mientras se cumpla una condición o mientras se recorren los elementos de una secuencia.

Sin bucles, si quisiéramos imprimir los números del 1 al 10, tendríamos que escribir 10 veces la misma instrucción print(). Gracias a los bucles, podemos reducir todo eso a unas pocas líneas y hacer que el programa sea mucho más flexible y reutilizable.

En Python existen principalmente dos tipos de bucles:

  1. while → se utiliza para repetir un bloque mientras se cumpla una condición lógica.
  2. for → se utiliza para recorrer secuencias (listas, tuplas, cadenas, rangos, etc.).

Además, Python ofrece sentencias especiales que modifican el comportamiento de los bucles:

  • break → interrumpe el bucle.
  • continue → salta a la siguiente iteración.
  • pass → no hace nada, sirve como marcador de posición.
  • else → ejecuta un bloque si el bucle termina normalmente (sin break).

1️⃣ El bucle while​

En muchas situaciones, no sabemos de antemano cuántas veces queremos repetir una acción. Por ejemplo: pedir una contraseña hasta que sea correcta, esperar a que el usuario escriba “salir” o simular que un contador se va decrementando hasta llegar a cero.

En estos casos, Python nos ofrece el bucle while, que repite un bloque de código mientras se cumpla una condición lógica.

La palabra inglesa while significa “mientras”, lo cual refleja su funcionamiento: el bloque de instrucciones se ejecuta mientras la condición sea verdadera. En cuanto la condición se vuelve falsa, el bucle termina y el programa continúa por la siguiente instrucción.

diagrama de estructura while
✍️ Sintaxis de 'while'
while condicion:
# bloque de codigo que se ejecuta si la condicion es True
  • La condición es una expresión que devuelve True o False.
  • Mientras la condición sea True, el bloque indentado se ejecuta una y otra vez.
  • Si la condición es False desde el principio, el bloque no se ejecutará ni una sola vez.
📌 Ejemplo de contador ascendente con while
contador = 1

while contador <= 5:
print("Valor:", contador)
contador += 1 # importante actualizar la variable

2️⃣ El bucle for​

En muchos lenguajes de programación, el bucle for se usa para ejecutar un bloque de código un número determinado de veces, controlado por un contador. En Python, sin embargo, el bucle for tiene un enfoque más simple y poderoso: sirve para recorrer elementos de una secuencia (listas, cadenas, tuplas, diccionarios…) o cualquier objeto que sea iterable.

La palabra inglesa for significa “para cada”. Por tanto, un for en Python se entiende como: 👉 “Para cada elemento de esta secuencia, haz algo con él”.

diagrama de estructura for
✍️ Sintaxis de 'for'
for variable in secuencia:
# bloque de código que se repite
  • variable es un nombre que irá tomando cada uno de los valores de la secuencia, uno por uno.
  • secuencia puede ser una lista, una cadena, un rango de números, etc. La secuencia debe ser siempre un elemento iterable
  • El bloque indentado se ejecutará tantas veces como elementos tenga la secuencia.
elementos iterables

En Python, un iterable es cualquier objeto capaz de devolver sus elementos uno por uno, de forma que se pueda recorrer en un bucle for o convertir en un objeto iterador mediante la función iter().

En otras palabras, un iterable es todo aquello que se puede recorrer secuencialmente. Los principales iterables en python son:

  • Cadenas de texto (str)
  • Listas (list)
  • Tuplas (tuple)
  • Diccionarios (dict)
  • Conjuntos (set)
  • Objetos range()

OJO 🔎 -> Aunque suelen confundirse, no es lo mismo un objeto iterable que un iterador:

  • Iterable → objeto que puede producir un iterador (listas, cadenas, tuplas, etc.).
  • Iterador → objeto que recuerda su posición y devuelve el siguiente elemento cuando se llama a next(). Lo veremos en unidades posteriores
Recorrer una lista con un for
paises = ["Italia", "Francia", "Alemania"]

for pais in paises:
print("Me gustaría visitar", pais)

# Me gustaría visitar Italia
# Me gustaría visitar Francia
# Me gustaría visitar Alemania

🟩 La función range()​

En muchos casos queremos repetir un bucle un número específico de veces, como un contador. Para eso, Python ofrece la función range(), que genera una secuencia de números.

✍️ Sintaxis de range()
range(inicio, fin, paso)
  • inicio → valor inicial (incluido). Por defecto es 0.
  • fin → valor final (excluido). Es obligatorio.
  • paso → incremento (positivo o negativo). Por defecto es 1.
📌 Ejemplo 'for' con range() básico
for i in range(4):
print(i)

# 0
# 1
# 2
# 3
📌 Ejemplo range() con inicio y fin
for i in range(1, 4):
print(i)

# 1
# 2
# 3
📌 Ejemplo range() con paso
for i in range(1, 20, 5):
print(i)

# 1
# 6
# 11
# 16
📌 Ejemplo range() decreciente
for i in range(8, 0, -2):
print(i)

# 8
# 6
# 4
# 2

3️⃣ Control avanzado de bucles​

Los bucles for y while nos permiten repetir acciones en Python, pero no siempre necesitamos que se ejecuten de forma lineal de principio a fin. Muchas veces queremos interrumpir, saltar partes del código, ejecutar acciones al finalizar o simplemente dejar huecos de código pendientes de implementar.

Para esas situaciones, Python nos ofrece cuatro herramientas muy útiles:

  • break → salir inmediatamente del bucle.
  • continue → saltar a la siguiente iteración.
  • else → ejecutar un bloque al terminar un bucle de forma “natural”.
  • pass → no hacer nada (instrucción nula).

Estas instrucciones funcionan tanto en bucles while como en for, aunque su utilidad puede variar según el caso.

🟩 break: salir de un bucle antes de tiempo​

La instrucción break detiene el bucle en cualquier momento, sin esperar a que la condición sea falsa (while) o a que se terminen los elementos (for).

📌 Ejemplo con 'while' → salir si el usuario escribe salir
while True:
texto = input("Escribe 'salir' para terminar: ")
if texto == "salir":
print("Programa finalizado")
break
print("Escribiste:", texto)
📌 Ejemplo con 'for' → buscar un número en una lista
numeros = [2, 4, 6, 8, 10]

for n in numeros:
if n == 6:
print("Encontrado el número 6")
break

🟦 continue: saltar a la siguiente iteración​

La instrucción continue omite el resto del bloque en la iteración actual y vuelve a comprobar la condición del bucle (while) o a pasar al siguiente elemento (for).

📌 Ejemplo con 'while' → validar entradas con continue
while True:
numero = input("Introduce un número positivo (o 'salir' para terminar): ")

if numero == "salir":
print("Fin del programa.")
break

if not numero.isdigit():
print("❌ Entrada no válida. Debes escribir un número.")
continue # vuelve al inicio del bucle sin ejecutar lo de abajo

numero = int(numero)
print("✅ Has introducido:", numero)
en este ejemplo

Con el uso de continue evitamos que el programa muestre un error al convertir a int uns posible cadena de texto.

📌 Ejemplo con 'for' →procesar lista de datos con continue
datos = [10, 0, 25, -5, 15]

for valor in datos:
if valor <= 0:
print(f"Saltando valor no válido: {valor}")
continue # no se puede dividir entre 0 o negativos

resultado = 100 / valor
print(f"Procesado {valor} → resultado: {resultado}")
en este ejemplo

En este caso evitamos la división por 0 o números negativos.

🟨 else en bucles​

Python permite añadir un bloque else a los bucles while y for. Este else se ejecuta solo si el bucle finaliza normalmente, es decir:

  • cuando la condición del while se vuelve falsa, o
  • cuando el for termina de recorrer todos los elementos.
aviso

Si el bucle se interrumpe con break, el else no se ejecuta.

📌 Ejemplo con 'while' → intentos de contraseña
intentos = 1
while intentos <= 3:
clave = input("Introduce la clave: ")
if clave == "python":
print("Acceso concedido")
break
intentos += 1
else:
print("Acceso denegado: demasiados intentos")
📌 Ejemplo con 'for' → búsqueda en una lista
numeros = [1, 3, 5, 7]

for n in numeros:
if n == 4:
print("Número encontrado")
break
else:
print("Número no está en la lista")

🟧 pass: no hacer nada​

La instrucción pass sirve como relleno: ocupa el lugar de un bloque que aún no queremos implementar, pero mantiene la sintaxis correcta.

📌 Ejemplo de pass con 'while'
while True:
opcion = input("Opción: ")
if opcion == "1":
print("Funcionalidad lista")
elif opcion == "2":
pass # pendiente de implementar
elif opcion == "salir":
break
📌 Ejemplo de pass con 'for'
for i in range(5):
if i == 2:
pass # todavía no hago nada con el 2
else:
print("Valor:", i)

✅ Buenas prácticas​

Buenas prácticas con WHILE
  • Evitar bucles infinitos accidentales: siempre hay que asegurarse de que la condición pueda volverse falsa en algún momento, o incluir un break que garantice la salida.
  • Actualizar las variables: si la condición depende de una variable (como un contador), es fundamental modificar su valor dentro del bucle, de lo contrario nunca terminará.
  • Usar while cuando no conocemos cuántas iteraciones habrá: si el número de repeticiones es fijo o corresponde al recorrido de una secuencia, suele ser mejor un bucle for.
  • Controlar la entrada del usuario: cuando el bucle depende de lo que escriba el usuario, es recomendable validar los datos para evitar errores.
Buenas prácticas con FOR
  • Usa for siempre que quieras recorrer los elementos de una colección o repetir un número determinado de veces.
  • Aprovecha range() para generar secuencias numéricas de manera clara.
  • Recuerda que el valor final en range() no se incluye: range(1, 5) llega hasta 4.
  • Prefiere el bucle for sobre while cuando el número de iteraciones es conocido o está bien definido.
Buenas prácticas en el control de bucles
  • Usa break para detener la ejecución cuando ya encontraste lo que buscabas o alcanzaste una condición de salida.
  • Usa continue para saltar casos no deseados y mantener el código más limpio.
  • Aprovecha else en bucles de búsqueda: evita tener que usar “banderas” adicionales.
  • Utiliza pass solo como marcador temporal; no lo dejes en versiones finales del código salvo casos muy justificados.