While loops: validación de entrada con break
Clase 19 de 49 • Curso Práctico de Python: Creación de un CRUD
Contenido del curso
Aprende a dominar las while loops en Python con ejemplos claros: desde una cuenta regresiva hasta validación de entradas del usuario. Evita el temido infinite loop, usa break cuando haga sentido y finaliza programas de forma segura con sys.exit. Todo explicado paso a paso y con errores reales resueltos con claridad.
¿Qué es una while loop y cómo evitar un infinite loop?
Una while loop itera mientras una condición sea verdadera; a diferencia de las for loops, que recorren una secuencia. Es potente, pero si la condición nunca se vuelve falsa, aparece un infinite loop. Esto sucedió al incrementar en lugar de decrementar la variable de control. Además, se mencionó que estos loops pueden consumir memoria y provocar errores como Stack Overflow. Incluso hay una calle llamada One Infinite Loop como guiño a este error.
¿Cómo luce una cuenta regresiva en código?
# Cuenta regresiva básica
def cuenta_regresiva(n):
while n > 0:
print(n)
n -= 1
- Itera mientras n > 0.
- Imprime y decrementa n en cada vuelta.
- Si n es negativo, no entra al loop.
¿Qué causa un infinite loop al contar hacia arriba?
# Versión con bug: se incrementa n y la condición nunca se vuelve falsa
def cuenta_regresiva(n):
while n > 0:
print(n)
n += 1 # Bug intencional: provoca un infinite loop si n inicia positivo
- La condición n > 0 siempre es verdadera si n crece.
- Se detiene con Control + C, pero es mejor prevenir el error.
¿Cómo aplicar while loops para validar input en Python?
Cuando un programa necesita un dato obligatorio, una while loop permite repetir la pregunta hasta que el usuario proporcione un valor válido. Python usa None para indicar “no hay valor”.
¿Cómo validar hasta obtener un nombre?
# Versión base: pedir el nombre del cliente hasta recibir un valor no vacío
def get_client_name():
client_name = None # None: sin valor
while not client_name:
client_name = input("nombre del cliente: ")
return client_name
- Se inicializa con None para indicar ausencia de dato.
- La condición while not client_name repite hasta que haya texto.
- Mejora la robustez de la interacción con el usuario.
¿Qué errores comunes y soluciones se muestran en el código?
Aparecieron dos tipos de errores: sintaxis (por ejemplo, mala indentación que impide ejecutar código tras un break) y lógica (como validar “no hay nombre” cuando realmente el valor es la palabra exit). También hubo un bug por usar una variable distinta a la que controla la condición del loop, dejando la condición siempre verdadera.
¿Cómo añadir una salida temprana con exit y break?
Se agregó una salida escribiendo exit. Para terminar el programa correctamente se usa sys.exit y se importa con import sys.
import sys
def get_client_name():
client_name = None
while True:
client_name = input("nombre del cliente: ")
# Salida temprana del loop
if client_name == "exit":
client_name = None # Corrección lógica: forzar ausencia de valor
break
# Si hay nombre válido, salir del loop
if client_name:
break
# Fuera del while: decidir si terminar el programa
if not client_name:
sys.exit()
return client_name
- Se mueve la validación fuera del bloque que se rompe con break para que sí se ejecute.
- Al escribir exit, se restablece a None para que sys.exit termine el programa.
- Se evita depender de Control + C y se documenta la intención con claridad.
¿Qué habilidades y conceptos se ponen en práctica?
- Diferencia entre for loops (secuencia) y while loops (condición).
- Control de flujo con break y condiciones booleanas.
- Validación de entradas con bucles y manejo de None.
- Depuración: distinguir entre errores de sintaxis y de lógica.
- Prevención de infinite loops y efectos en memoria, como Stack Overflow.
- Buenas prácticas: probar casos límite como números negativos.
- Flujo de salida del programa con sys.exit e import sys.
¿Te gustaría ver más patrones de validación con while o casos de salida temprana? Comparte tus dudas y ejemplos en los comentarios.