04. Estructuras de Control: if, for, while
Aprende a controlar el flujo de tus programas con condicionales y bucles
Aprende a controlar el flujo de tus programas con condicionales y bucles. Estas estructuras son esenciales para cualquier análisis de datos.
Condicionales: if, elif, else
Los condicionales permiten ejecutar código basándose en condiciones:
Estructura básica
# if simple
edad = 25
if edad >= 18:
print("Eres mayor de edad")
print("Puedes votar")
if-else
# Decisión binaria
stock = 5
if stock > 0:
print("Producto disponible")
else:
print("Producto agotado")
if-elif-else
# Múltiples condiciones
puntuacion = 85
if puntuacion >= 90:
calificacion = "A - Excelente"
elif puntuacion >= 80:
calificacion = "B - Muy bien"
elif puntuacion >= 70:
calificacion = "C - Bien"
elif puntuacion >= 60:
calificacion = "D - Suficiente"
else:
calificacion = "F - Insuficiente"
print(f"Calificación: {calificacion}")
Ejemplo práctico: Análisis de campaña
# Datos de campaña
ctr = 3.5
conversion_rate = 4.2
roi = 250
# Análisis multinivel
if roi > 200 and ctr > 3 and conversion_rate > 4:
estado = "🌟 EXCEPCIONAL"
accion = "Escalar presupuesto inmediatamente"
elif roi > 100 and ctr > 2:
estado = "✅ BUENA"
accion = "Mantener y optimizar"
elif roi > 0:
estado = "⚠️ REGULAR"
accion = "Revisar segmentación y creativos"
else:
estado = "❌ MALA"
accion = "Pausar y reformular estrategia"
print(f"Estado de campaña: {estado}")
print(f"ROI: {roi}% | CTR: {ctr}% | Conv: {conversion_rate}%")
print(f"Acción recomendada: {accion}")
Resultado:
Estado de campaña: 🌟 EXCEPCIONAL
ROI: 250% | CTR: 3.5% | Conv: 4.2%
Acción recomendada: Escalar presupuesto inmediatamente
Operador ternario (if de una línea)
# Forma larga
edad = 20
if edad >= 18:
status = "adulto"
else:
status = "menor"
# Forma corta (ternario)
status = "adulto" if edad >= 18 else "menor"
# Ejemplo práctico
precio = 150
descuento = 0.20 if precio > 100 else 0.10
precio_final = precio * (1 - descuento)
print(f"Precio final: ${precio_final}") # $120.0
Bucle for
El bucle for itera sobre secuencias (listas, tuplas, strings, rangos):
Iterar sobre listas
# Lista de ventas diarias
ventas = [1200, 1450, 1100, 1800, 1950, 2100, 1750]
# Imprimir cada venta
for venta in ventas:
print(f"Venta del día: ${venta:,}")
# Con índice usando enumerate()
for dia, venta in enumerate(ventas, start=1):
print(f"Día {dia}: ${venta:,}")
Usar range()
# range(n) genera números de 0 a n-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(inicio, fin)
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
# range(inicio, fin, paso)
for i in range(0, 11, 2):
print(i) # 0, 2, 4, 6, 8, 10
Ejemplo práctico: Análisis de ventas
# Datos de ventas mensuales
ventas_mensuales = {
"Enero": 45000,
"Febrero": 52000,
"Marzo": 48000,
"Abril": 61000,
"Mayo": 55000,
"Junio": 70000
}
# Calcular total y análisis
total_ventas = 0
mejor_mes = ""
mejor_venta = 0
for mes, venta in ventas_mensuales.items():
total_ventas += venta
# Determinar mejor mes
if venta > mejor_venta:
mejor_venta = venta
mejor_mes = mes
# Análisis por mes
if venta > 60000:
rendimiento = "⭐ Excelente"
elif venta > 50000:
rendimiento = "✅ Bueno"
else:
rendimiento = "⚠️ Regular"
print(f"{mes}: ${venta:,} - {rendimiento}")
promedio = total_ventas / len(ventas_mensuales)
print("\n" + "="*50)
print(f"Total H1 2024: ${total_ventas:,}")
print(f"Promedio mensual: ${promedio:,.2f}")
print(f"Mejor mes: {mejor_mes} (${mejor_venta:,})")
Resultado:
Enero: $45,000 - ⚠️ Regular
Febrero: $52,000 - ✅ Bueno
Marzo: $48,000 - ⚠️ Regular
Abril: $61,000 - ⭐ Excelente
Mayo: $55,000 - ✅ Bueno
Junio: $70,000 - ⭐ Excelente
==================================================
Total H1 2024: $331,000
Promedio mensual: $55,166.67
Mejor mes: Junio ($70,000)
List comprehension (for avanzado)
# Forma tradicional
cuadrados = []
for x in range(1, 6):
cuadrados.append(x ** 2)
print(cuadrados) # [1, 4, 9, 16, 25]
# List comprehension (más Pythonic)
cuadrados = [x ** 2 for x in range(1, 6)]
print(cuadrados) # [1, 4, 9, 16, 25]
# Con condición
pares = [x for x in range(10) if x % 2 == 0]
print(pares) # [0, 2, 4, 6, 8]
# Ejemplo práctico: filtrar productos
productos = [
{"nombre": "Laptop", "precio": 800, "stock": 5},
{"nombre": "Mouse", "precio": 25, "stock": 0},
{"nombre": "Teclado", "precio": 60, "stock": 8},
{"nombre": "Monitor", "precio": 300, "stock": 0}
]
# Productos disponibles
disponibles = [p["nombre"] for p in productos if p["stock"] > 0]
print(f"Productos disponibles: {disponibles}")
# ['Laptop', 'Teclado']
# Precios con descuento
precios_descuento = [p["precio"] * 0.9 for p in productos]
print(f"Precios con 10% descuento: {precios_descuento}")
Bucle while
El bucle while se ejecuta mientras una condición sea verdadera:
Estructura básica
# Contador simple
contador = 1
while contador <= 5:
print(f"Iteración {contador}")
contador += 1
print("Bucle terminado")
Ejemplo práctico: Validación de entrada
# Simular validación de edad
intentos = 0
max_intentos = 3
while intentos < max_intentos:
edad_input = "25" # En producción sería: input("Ingresa tu edad: ")
try:
edad = int(edad_input)
if 18 <= edad <= 120:
print(f"✅ Edad válida: {edad}")
break # Salir del bucle
else:
print("⚠️ Edad fuera de rango (18-120)")
except ValueError:
print("❌ Error: Ingresa solo números")
intentos += 1
print(f"Intentos restantes: {max_intentos - intentos}\n")
else:
print("❌ Máximo de intentos alcanzado")
Ejemplo: Cálculo de interés compuesto
# Capital inicial
capital_inicial = 10000
tasa_interes = 0.07 # 7% anual
objetivo = 20000
años = 0
capital_actual = capital_inicial
print(f"Capital inicial: ${capital_inicial:,.2f}")
print(f"Tasa de interés: {tasa_interes*100}%")
print(f"Objetivo: ${objetivo:,.2f}\n")
while capital_actual < objetivo:
años += 1
interes = capital_actual * tasa_interes
capital_actual += interes
print(f"Año {años}: ${capital_actual:,.2f} (interés: ${interes:,.2f})")
print(f"\n✅ Objetivo alcanzado en {años} años")
print(f"Capital final: ${capital_actual:,.2f}")
Resultado:
Capital inicial: $10,000.00
Tasa de interés: 7.0%
Objetivo: $20,000.00
Año 1: $10,700.00 (interés: $700.00)
Año 2: $11,449.00 (interés: $749.00)
Año 3: $12,250.43 (interés: $801.43)
...
Año 10: $19,671.51 (interés: $1,286.92)
Año 11: $21,048.52 (interés: $1,377.01)
✅ Objetivo alcanzado en 11 años
Capital final: $21,048.52
Control de flujo: break, continue, pass
break: Salir del bucle
# Buscar un producto en inventario
productos = ["Laptop", "Mouse", "Teclado", "Monitor", "Tablet"]
buscar = "Teclado"
for producto in productos:
if producto == buscar:
print(f"✅ Producto encontrado: {producto}")
break # Salir del bucle
print(f"Buscando... revisando {producto}")
else:
# Este else se ejecuta si el bucle NO fue interrumpido por break
print(f"❌ Producto '{buscar}' no encontrado")
continue: Saltar a la siguiente iteración
# Procesar solo ventas válidas
ventas = [1200, -50, 1450, 0, 1800, -100, 1950]
ventas_validas = 0
total = 0
for venta in ventas:
if venta <= 0:
print(f"⚠️ Venta inválida ignorada: {venta}")
continue # Saltar esta iteración
ventas_validas += 1
total += venta
print(f"✅ Venta procesada: ${venta:,}")
print(f"\nTotal de {ventas_validas} ventas válidas: ${total:,}")
pass: Placeholder (no hace nada)
# Útil durante desarrollo para definir estructura sin implementar
for producto in productos:
if producto == "Laptop":
pass # TODO: implementar lógica especial para laptops
elif producto == "Mouse":
print("Procesando mouse...")
else:
pass
Bucles anidados
# Análisis de ventas por categoría y región
ventas_por_region = {
"Norte": {"Electrónica": 50000, "Ropa": 30000, "Alimentos": 20000},
"Sur": {"Electrónica": 45000, "Ropa": 35000, "Alimentos": 25000},
"Este": {"Electrónica": 60000, "Ropa": 28000, "Alimentos": 22000}
}
total_general = 0
for region, categorias in ventas_por_region.items():
print(f"\n{'='*40}")
print(f"REGIÓN: {region}")
print(f"{'='*40}")
total_region = 0
for categoria, venta in categorias.items():
total_region += venta
total_general += venta
print(f" {categoria}: ${venta:,}")
print(f" ---")
print(f" Total {region}: ${total_region:,}")
print(f"\n{'='*40}")
print(f"TOTAL GENERAL: ${total_general:,}")
Proyecto práctico: Analizador de KPIs
# Dashboard de KPIs mensual
kpis = {
"Enero": {"usuarios": 1000, "conversiones": 45, "ingresos": 4500},
"Febrero": {"usuarios": 1200, "conversiones": 60, "ingresos": 6000},
"Marzo": {"usuarios": 1500, "conversiones": 90, "ingresos": 9000},
"Abril": {"usuarios": 1800, "conversiones": 108, "ingresos": 10800},
}
# Objetivos
OBJETIVO_CONVERSION_RATE = 6.0 # 6%
OBJETIVO_REVENUE_PER_USER = 5.5 # $5.5 por usuario
print("="*60)
print("ANÁLISIS DE KPIs - Q1 2024")
print("="*60)
# Análisis mes por mes
meses_cumpliendo = 0
for mes, metricas in kpis.items():
usuarios = metricas["usuarios"]
conversiones = metricas["conversiones"]
ingresos = metricas["ingresos"]
# Calcular métricas derivadas
conversion_rate = (conversiones / usuarios) * 100
revenue_per_user = ingresos / usuarios
# Evaluar cumplimiento
cumple_conversion = conversion_rate >= OBJETIVO_CONVERSION_RATE
cumple_revenue = revenue_per_user >= OBJETIVO_REVENUE_PER_USER
cumple_objetivos = cumple_conversion and cumple_revenue
if cumple_objetivos:
meses_cumpliendo += 1
estado = "🎯 CUMPLE"
else:
estado = "⚠️ NO CUMPLE"
print(f"\n{mes}:")
print(f" Usuarios: {usuarios:,}")
print(f" Conversiones: {conversiones}")
print(f" Ingresos: ${ingresos:,}")
print(f" Conversion Rate: {conversion_rate:.2f}% (Objetivo: {OBJETIVO_CONVERSION_RATE}%)")
print(f" Revenue/User: ${revenue_per_user:.2f} (Objetivo: ${OBJETIVO_REVENUE_PER_USER})")
print(f" Estado: {estado}")
# Recomendaciones específicas
if not cumple_conversion:
print(f" 📌 Acción: Mejorar embudo de conversión")
if not cumple_revenue:
print(f" 📌 Acción: Aumentar ticket promedio")
# Resumen ejecutivo
print("\n" + "="*60)
print("RESUMEN EJECUTIVO")
print("="*60)
print(f"Meses cumpliendo objetivos: {meses_cumpliendo}/{len(kpis)}")
cumplimiento_porcentaje = (meses_cumpliendo / len(kpis)) * 100
print(f"Tasa de cumplimiento: {cumplimiento_porcentaje:.1f}%")
if cumplimiento_porcentaje >= 75:
print("✅ Rendimiento trimestral EXCELENTE")
elif cumplimiento_porcentaje >= 50:
print("⚠️ Rendimiento trimestral REGULAR - Requiere mejoras")
else:
print("❌ Rendimiento trimestral BAJO - Acción inmediata requerida")
Buenas prácticas
1. Usar nombres descriptivos en bucles
❌ Mal:
for i in lista:
print(i)
✅ Bien:
for producto in productos:
print(producto)
for usuario in usuarios_activos:
enviar_email(usuario)
2. Evitar bucles innecesarios
❌ Mal:
total = 0
for venta in ventas:
total += venta
✅ Bien:
total = sum(ventas)
3. Usar else en bucles cuando sea apropiado
# Buscar elemento
for item in lista:
if item == objetivo:
print("Encontrado!")
break
else:
print("No encontrado") # Solo se ejecuta si NO hubo break
Resumen de la lección
✅ Los condicionales (if/elif/else) controlan qué código se ejecuta ✅ El bucle for itera sobre secuencias y es ideal para analizar listas de datos ✅ El bucle while se ejecuta mientras una condición sea verdadera ✅ break sale del bucle, continue salta a la siguiente iteración ✅ List comprehension es una forma elegante de crear listas con for ✅ Los bucles anidados permiten análisis multidimensionales
🎯 Próxima lección: 05. Funciones y Módulos
En la siguiente lección aprenderás a crear funciones reutilizables y organizar tu código profesionalmente. 🚀
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.