Objetivo de Aprendizaje
Dominar el uso del bucle while en Python para desarrollar programas que respondan a situaciones reales donde no se conoce de antemano la cantidad de repeticiones necesarias, fomentando el pensamiento algorítmico, la capacidad de resolución de problemas complejos y la perseverancia ante desafíos técnicos, a través de la experimentación directa con código, el análisis de resultados y la reflexión metacognitiva sobre el proceso de aprendizaje.
Reflexión inicial
Antes de comenzar, piensa en estas preguntas:
- ¿Has tenido que repetir una tarea hasta lograr un resultado específico?
- ¿Cómo decides cuándo dejar de intentar algo?
- ¿Qué situaciones de tu vida diaria siguen un patrón de "mientras una condición se cumple, sigue adelante"?
Contextualización
Imagina que estás subiendo el Cotopaxi, el volcán activo más alto del mundo. Cada paso que das es una repetición del anterior, pero con un propósito: llegar a la cima. No sabes exactamente cuántos pasos necesitarás, pero continúas mientras tengas energía, mientras el clima lo permita, mientras tu cuerpo resista.
Así funciona el bucle while en programación: repite una acción mientras una condición sea verdadera. No sabemos cuántas repeticiones hará, solo sabemos que continuará hasta que algo cambie.
En nuestro contexto ecuatoriano, piensa en:
- El proceso de preparación del ceviche: agregas limón mientras el pescado no tenga la textura adecuada.
- Una llamada telefónica: permaneces en la línea mientras no te atiendan.
- El ahorro para un objetivo: guardas dinero mientras no hayas alcanzado la meta.
En programación, el while es tu aliado para situaciones donde la incertidumbre es la regla, no la excepción. Es el bucle de la resiliencia, de la perseverancia, de seguir intentando hasta lograrlo.
Desarrollo de la Actividad
Conceptos Fundamentales
El bucle while ejecuta un bloque de código repetidamente mientras una condición especificada sea verdadera. Su estructura básica es:
while condición:
# Bloque de código a repetir
# Es crucial modificar la condición dentro del bucle
# para evitar bucles infinitos
Ejemplo 1: Contador simple
Un ejemplo clásico es un contador que va desde 1 hasta un límite:
# Inicializamos una variable contador
contador = 1
# El bucle se ejecutará mientras contador sea menor o igual a 5
while contador <= 5:
print(f"Este es el paso número {contador}")
# Incrementamos el contador en 1 en cada iteración
contador = contador + 1
print("¡Hemos terminado de contar!")
Experimento: Modifica el código
Intenta cambiar el código anterior:
- ¿Qué pasa si olvidas incrementar el contador?
- ¿Cómo harías para contar de 2 en 2?
- ¿Qué ocurre si cambias la condición a
contador < 10?
Escribe tu propio código y observa los resultados.
Ejemplo 2: Validación de entrada
Un uso muy común del bucle while es validar la entrada del usuario:
# Solicitamos una edad válida al usuario
edad = 0
# El bucle continuará mientras la edad no esté en el rango válido
while edad < 1 or edad > 100:
try:
edad = int(input("Ingresa tu edad (1-100): "))
if edad < 1 or edad > 100:
print("Edad no válida. Intenta de nuevo.")
except ValueError:
print("Debes ingresar un número entero.")
edad = 0
print(f"Edad registrada correctamente: {edad} años")
Ejemplo 3: Simulación de un cajero automático
Vamos a simular un cajero automático sencillo:
# Simulación de un cajero automático básico
saldo = 1000.00
continuar = True
print("=== BIENVENIDO AL CAJERO AUTOMÁTICO ===")
while continuar:
print(f"\nTu saldo actual es: ${saldo:.2f}")
print("1. Retirar dinero")
print("2. Salir")
opcion = input("Selecciona una opción: ")
if opcion == "1":
monto = float(input("Ingresa el monto a retirar: $"))
if monto > saldo:
print("Fondos insuficientes.")
elif monto <= 0:
print("Monto no válido.")
else:
saldo -= monto
print(f"Retiro exitoso. Nuevo saldo: ${saldo:.2f}")
elif opcion == "2":
continuar = False
print("Gracias por usar nuestro cajero. ¡Hasta pronto!")
else:
print("Opción no válida. Intenta de nuevo.")
print("=====================================")
Reflexión metacognitiva
Después de analizar estos ejemplos, responde mentalmente:
- ¿En qué se diferencia el bucle while del bucle for que ya conoces?
- ¿Cuál es el peligro principal al usar bucles while y cómo puedes evitarlo?
- ¿Qué tipo de problemas se resuelven mejor con while que con for?
Reto Final
El Juego de Adivinanzas Andino
Crea un juego donde el programa "piense" en un número secreto entre 1 y 100 (como los secretos guardados en las montañas de los Andes), y el jugador deba adivinarlo. El juego debe:
- Generar un número aleatorio entre 1 y 100.
- Permitir al usuario ingresar intentos hasta que adivine el número.
- Dar pistas indicando si el número ingresado es mayor o menor que el secreto.
- Llevar un conteo de los intentos realizados.
- Preguntar al final si desea jugar nuevamente.
# Importamos la función randint para generar números aleatorios
from random import randint
# Variable para controlar si seguimos jugando
seguir_jugando = True
print("=== JUEGO DE ADIVINANZAS ANDINO ===")
print("Adivina el número secreto (entre 1 y 100)")
print("¡Buena suerte!")
while seguir_jugando:
# 1. Generar el número secreto aleatorio
numero_secreto = randint(1, 100)
# 2. Inicializar el contador de intentos
intentos = 0
# 3. Variable para saber si el jugador ha adivinado
adivinado = False
# 4. Bucle principal del juego
while # COMPLETA ESTA CONDICIÓN:
# 5. Pedir al usuario un número
# 6. Incrementar el contador de intentos
# 7. Comparar el número ingresado con el secreto
# 8. Dar pistas (mayor/menor) o felicitar si acertó
pass # Elimina esta línea cuando escribas tu código
# 9. Preguntar si quiere jugar nuevamente
respuesta = input("¿Quieres jugar otra vez? (s/n): ").lower()
if respuesta != "s":
seguir_jugando = False
print("¡Gracias por jugar! Hasta la próxima.")
Desafío adicional (opcional)
Si completaste el reto básico, intenta estas mejoras:
- Agrega niveles de dificultad (fácil: 1-50, medio: 1-100, difícil: 1-200).
- Lleva un registro del récord de menos intentos.
- Muestra mensajes diferentes según la cantidad de intentos (ej: "¡Eres un adivino experto!" si acertó en menos de 5 intentos).
- Permite al usuario establecer sus propios rangos (ej: "Adivina entre 20 y 500").
Evaluación Lúdica
Responde las siguientes preguntas para demostrar tu comprensión del bucle while.
¿Cuál es la principal característica del bucle while en Python?
¿Qué problema puede ocurrir si olvidamos actualizar la variable de control en un bucle while?
¿Cuál es la salida del siguiente código?
contador = 5
while contador > 0:
print(contador, end=" ")
contador -= 1