Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Condicionales: El Gerente Inteligente

🧭 Navegación:

¡Bienvenido al centro de decisiones de tu almacén! Hasta ahora has aprendido a organizar cajas (variables), usar herramientas (operadores), y hacer comparaciones. Ahora viene lo más emocionante: ¡hacer que tu programa piense y tome decisiones como tú!

Los condicionales son como tener un gerente súper inteligente en tu almacén que puede evaluar situaciones y decidir qué hacer en cada caso.

El gerente inteligente de tu almacén 🧠

Imagínate que contratas a un gerente para tu almacén que es capaz de:

  • Evaluar situaciones usando las herramientas de comparación
  • Tomar decisiones basadas en esas evaluaciones
  • Ejecutar diferentes acciones según cada situación
  • Manejar múltiples escenarios complejos
# El gerente en acción
edad = 17

# El gerente evalúa y decide
if edad >= 18:
    print(f"Eres mayor de edad, puedes votar")
else:
    print(f"Eres menor de edad, aún no puedes votar")

Este gerente usa la palabra mágica if (si) para evaluar condiciones y tomar decisiones.

¿Qué es el control de flujo?

El control de flujo es la capacidad de tu programa para tomar diferentes caminos según las circunstancias. Es como tener un mapa con múltiples rutas y elegir cuál tomar según las condiciones del momento.

Sin control de flujo (aburrido):

# El programa siempre hace lo mismo
print("Buenos días")
print("¿Cómo estás?")
print("Que tengas buen día")

Con control de flujo (¡inteligente!):

import datetime

hora_actual = datetime.datetime.now().hour

# El programa se adapta a la situación
if hora_actual < 12:
    print("¡Buenos días!")
elif hora_actual < 18:
    print("¡Buenas tardes!")
else:
    print("¡Buenas noches!")

print("¿Cómo estás?")
print("Que tengas buen día")

🔍 Mi perspectiva personal: Siempre pienso en los condicionales como en las bifurcaciones de un camino. Cada if es un punto donde el programa debe decidir qué ruta tomar. Esta forma de pensar me ayuda a visualizar el flujo del programa y a entender cómo se comportará en diferentes situaciones.

La estructura básica: if (si)

La estructura más básica es if (si). Es como preguntarle al gerente: “Si esta condición es verdadera, ¿qué hago?”

Sintaxis básica:

if condicion:
    # Código que se ejecuta si la condición es True
    accion_a_realizar()

Ejemplo práctico:

# ================================
# DETECTOR DE TEMPERATURA
# ================================

temperatura = 35

print("🌡️ DETECTOR DE TEMPERATURA")
print(f"Temperatura actual: {temperatura} °C")

# El gerente evalúa la temperatura
if temperatura > 30:
    print("🔥 ¡Hace mucho calor!")
    print("💧 Recuerda hidratarte")
    print("🏠 Considera usar aire acondicionado")

print("📊 Reporte de temperatura completado")

Nota importante: Fíjate en la indentación (espacios al inicio). Todo el código que está indentado después del if solo se ejecuta si la condición es verdadera.

La estructura completa: if-else (si-sino)

A veces el gerente necesita decidir entre dos opciones: “Si pasa esto, haz A; si no, haz B”.

Sintaxis:

if condicion:
    # Código si la condición es True
    hacer_esto()
else:
    # Código si la condición es False
    hacer_esto_otro()

Ejemplo práctico:

# ================================
# SISTEMA DE ACCESO
# ================================

contraseña_correcta = "python123"
contraseña_ingresada = "python123"  # Simular entrada del usuario

print("🔐 SISTEMA DE ACCESO")
print("Verificando credenciales...")

# El gerente evalúa las credenciales
if contraseña_ingresada == contraseña_correcta:
    print("✅ Acceso concedido")
    print("🏠 Bienvenido al sistema")
    print("📊 Cargando panel de control...")
else:
    print("❌ Acceso denegado")
    print("🚫 Contraseña incorrecta")
    print("🔄 Intenta nuevamente")

print("🔚 Proceso de autenticación completado")

La estructura múltiple: if-elif-else (si-sino si-sino)

Para situaciones más complejas, el gerente puede evaluar múltiples condiciones en orden:

Sintaxis:

if primera_condicion:
    # Código para la primera condición
    hacer_a()
elif segunda_condicion:
    # Código para la segunda condición
    hacer_b()
elif tercera_condicion:
    # Código para la tercera condición
    hacer_c()
else:
    # Código si ninguna condición es verdadera
    hacer_por_defecto()

Ejemplo práctico:

# ================================
# CALCULADORA DE CALIFICACIONES
# ================================

calificacion = 85

print("📊 CALCULADORA DE CALIFICACIONES")
print(f"Calificación obtenida: {calificacion}")
print()

# El gerente evalúa múltiples rangos
if calificacion >= 90:
    print("🏆 ¡EXCELENTE!")
    print("⭐ Calificación: A")
    print("🎉 ¡Felicidades por tu excelente desempeño!")
elif calificacion >= 80:
    print("😊 ¡MUY BIEN!")
    print("⭐ Calificación: B")
    print("👍 Buen trabajo, sigue así")
elif calificacion >= 70:
    print("🙂 BIEN")
    print("⭐ Calificación: C")
    print("📚 Puedes mejorar con más estudio")
elif calificacion >= 60:
    print("😐 REGULAR")
    print("⭐ Calificación: D")
    print("⚠️ Necesitas esforzarte más")
else:
    print("😞 INSUFICIENTE")
    print("⭐ Calificación: F")
    print("📖 Es importante que estudies más")

print()
print("📋 Evaluación completada")

Condiciones complejas

El gerente puede evaluar condiciones muy complejas usando las herramientas que aprendimos en el capítulo anterior:

Usando operadores lógicos:

# ================================
# SISTEMA DE DESCUENTOS INTELIGENTE
# ================================

edad_cliente = 25
es_estudiante = True
compra_total = 500
es_primera_compra = False
es_cliente_premium = False

print("🛒 SISTEMA DE DESCUENTOS INTELIGENTE")
print("=" * 40)
print("👤 Información del cliente:")
print(f"Edad: {edad_cliente}")
print(f"Es estudiante: {es_estudiante}")
print(f"Compra total: ${compra_total}")
print(f"Primera compra: {es_primera_compra}")
print(f"Cliente premium: {es_cliente_premium}")
print()

# El gerente evalúa múltiples condiciones complejas
print("🔍 Evaluando descuentos disponibles...")
print()

# Descuento por edad (tercera edad o joven)
if edad_cliente >= 65 or edad_cliente <= 25:
    if edad_cliente >= 65:
        print("👴 Descuento tercera edad: 15%")
        descuento_edad = 15
    else:
        print("👶 Descuento joven: 10%")
        descuento_edad = 10
else:
    descuento_edad = 0

# Descuento por estudiante
if es_estudiante and edad_cliente <= 30:
    print("🎓 Descuento estudiante: 12%")
    descuento_estudiante = 12
else:
    descuento_estudiante = 0

# Descuento por monto de compra
if compra_total >= 1000:
    print("💰 Descuento compra alta: 20%")
    descuento_compra = 20
elif compra_total >= 500:
    print("💵 Descuento compra media: 10%")
    descuento_compra = 10
else:
    descuento_compra = 0

# Descuento especial
if es_primera_compra and compra_total >= 200:
    print("🎁 Descuento primera compra: 15%")
    descuento_especial = 15
elif es_cliente_premium:
    print("⭐ Descuento cliente premium: 25%")
    descuento_especial = 25
else:
    descuento_especial = 0

# Calcular el mejor descuento
descuento_maximo = max(descuento_edad, descuento_estudiante, 
                      descuento_compra, descuento_especial)

print()
print("🎯 RESULTADO:")
if descuento_maximo > 0:
    ahorro = compra_total * (descuento_maximo / 100)
    precio_final = compra_total - ahorro
    
    print("✅ ¡Tienes descuento!")
    print(f"Descuento aplicado: {descuento_maximo}%")
    print(f"Ahorro: ${round(ahorro, 2)}")
    print(f"Precio final: ${round(precio_final, 2)}")
else:
    print("❌ No hay descuentos disponibles")
    print(f"Precio final: ${compra_total}")

Condicionales anidados

A veces el gerente necesita tomar decisiones dentro de otras decisiones:

# ================================
# SISTEMA DE RECOMENDACIÓN DE ACTIVIDADES
# ================================

clima = "soleado"  # "soleado", "lluvioso", "nublado"
temperatura = 25
tiene_dinero = True
tiene_tiempo = True

print("🌤️ SISTEMA DE RECOMENDACIÓN DE ACTIVIDADES")
print("=" * 50)
print(f"Clima: {clima}")
print(f"Temperatura: {temperatura} °C")
print(f"Tiene dinero: {tiene_dinero}")
print(f"Tiene tiempo: {tiene_tiempo}")
print()

print("🤔 Analizando opciones...")
print()

# Primera decisión: evaluar el clima
if clima == "soleado":
    print("☀️ ¡Qué buen día!")
    
    # Segunda decisión: evaluar la temperatura
    if temperatura >= 25:
        print("🏖️ Perfecto para actividades al aire libre")
        
        # Tercera decisión: evaluar recursos
        if tiene_dinero and tiene_tiempo:
            print("🎯 RECOMENDACIONES:")
            print("  • Ir a la playa")
            print("  • Hacer un picnic en el parque")
            print("  • Visitar un parque de diversiones")
        elif tiene_tiempo:
            print("🎯 RECOMENDACIONES (sin costo):")
            print("  • Caminar en el parque")
            print("  • Hacer ejercicio al aire libre")
            print("  • Visitar lugares gratuitos")
        elif tiene_dinero:
            print("🎯 RECOMENDACIONES (rápidas):")
            print("  • Tomar un café en terraza")
            print("  • Comprar helado")
        else:
            print("🎯 RECOMENDACIÓN:")
            print("  • Sentarse en el parque a disfrutar el sol")
    else:
        print("🧥 Hace un poco de frío, pero se puede salir")
        
        if tiene_dinero and tiene_tiempo:
            print("🎯 RECOMENDACIONES:")
            print("  • Ir al cine")
            print("  • Visitar un museo")
            print("  • Ir a un café")
        else:
            print("🎯 RECOMENDACIÓN:")
            print("  • Dar un paseo corto")

elif clima == "lluvioso":
    print("🌧️ Está lloviendo")
    
    if tiene_dinero:
        print("🎯 RECOMENDACIONES (lugares cerrados):")
        print("  • Ir al cine")
        print("  • Visitar un centro comercial")
        print("  • Ir a un café")
    else:
        print("🎯 RECOMENDACIONES (en casa):")
        print("  • Leer un libro")
        print("  • Ver películas")
        print("  • Cocinar algo especial")

else:  # clima nublado
    print("☁️ Día nublado")
    print("🎯 RECOMENDACIÓN:")
    print("  • Actividades flexibles que se puedan mover adentro si es necesario")

print()
print("🌟 ¡Que disfrutes tu día!")

Operador ternario: Decisiones en una línea

Python ofrece una forma compacta de tomar decisiones simples en una sola línea:

Sintaxis:

valor_si_verdadero if condicion else valor_si_falso

Ejemplo práctico:

# ================================
# VERIFICADOR DE EDAD RÁPIDO
# ================================

edad = 20

# Versión normal con if-else
if edad >= 18:
    estado = "Mayor de edad"
else:
    estado = "Menor de edad"

print(f"Versión normal: {estado}")

# Versión con operador ternario
estado = "Mayor de edad" if edad >= 18 else "Menor de edad"
print(f"Versión ternaria: {estado}")

# Uso práctico en una función
def calcular_precio(precio_base, es_miembro):
    descuento = 0.15 if es_miembro else 0
    return precio_base * (1 - descuento)

precio_normal = calcular_precio(100, False)
precio_miembro = calcular_precio(100, True)

print(f"Precio normal: ${precio_normal}")
print(f"Precio miembro: ${precio_miembro}")

Buenas prácticas para condicionales

1. Usa nombres descriptivos para condiciones complejas:

# ❌ CONFUSO
if edad >= 18 and (ingresos > 30000 or tiene_aval) and historial_crediticio > 650:
    aprobar_prestamo()

# ✅ CLARO
es_mayor_edad = edad >= 18
tiene_ingresos_suficientes = ingresos > 30000 or tiene_aval
buen_historial_crediticio = historial_crediticio > 650

if es_mayor_edad and tiene_ingresos_suficientes and buen_historial_crediticio:
    aprobar_prestamo()

2. Ordena las condiciones de más específica a más general:

# ✅ CORRECTO - de específico a general
if calificacion >= 95:
    print("Excelencia académica")
elif calificacion >= 90:
    print("Muy bueno")
elif calificacion >= 80:
    print("Bueno")
else:
    print("Necesita mejorar")

3. Evita condicionales demasiado anidados:

# ❌ DIFÍCIL DE LEER
if condicion1:
    if condicion2:
        if condicion3:
            if condicion4:
                hacer_algo()

# ✅ MÁS CLARO
if condicion1 and condicion2 and condicion3 and condicion4:
    hacer_algo()

Comprueba tu comprensión 🧠

  1. ¿Qué imprimirá el siguiente código?

    x = 15
    y = 10
    
    if x > y:
        print("A")
    elif x == y:
        print("B")
    else:
        print("C")
    
  2. ¿Cuál es la diferencia entre if-elif-else y múltiples sentencias if independientes?

  3. Escribe un código que determine si un año es bisiesto usando condicionales.

  4. ¿Qué valor tendrá resultado en este código?

    a = 5
    b = 10
    resultado = "Mayor" if a > b else "Menor o igual"
    

Soluciones

  1. El código imprimirá "A" porque x > y es verdadero (15 > 10).

  2. Diferencia entre if-elif-else y múltiples if:

    • En una estructura if-elif-else, solo se ejecuta el bloque de la primera condición que sea verdadera.
    • Con múltiples sentencias if independientes, se evalúan todas las condiciones y se ejecutan todos los bloques cuyas condiciones sean verdaderas. Ejemplo:
    # Con if-elif-else (solo se ejecuta uno)
    if x > 10:
        print("Mayor que 10")
    elif x > 5:
        print("Mayor que 5")  # No se ejecuta aunque sea verdadero si x > 10
    
    # Con múltiples if (se ejecutan todos los verdaderos)
    if x > 10:
        print("Mayor que 10")
    if x > 5:
        print("Mayor que 5")  # Se ejecuta si x > 5, independientemente de x > 10
    
  3. Código para determinar si un año es bisiesto:

    año = 2024
    
    if (año % 4 == 0 and año % 100 != 0) or (año % 400 == 0):
        print(f"{año} es un año bisiesto")
    else:
        print(f"{año} no es un año bisiesto")
    
  4. El valor de resultado será "Menor o igual" porque a > b es falso (5 no es mayor que 10).

Ejercicio práctico: Sistema de evaluación médica

Vamos a crear un sistema complejo que combine todo lo aprendido:

# ================================
# SISTEMA DE EVALUACIÓN MÉDICA BÁSICA
# ================================

print("🏥 SISTEMA DE EVALUACIÓN MÉDICA BÁSICA")
print("=" * 45)

# Datos del paciente
nombre_paciente = "Ana García"
edad = 45
temperatura = 38.2
presion_sistolica = 140
presion_diastolica = 85
frecuencia_cardiaca = 95
tiene_sintomas_respiratorios = True
tiene_dolor_pecho = False
toma_medicamentos = True

print("👤 INFORMACIÓN DEL PACIENTE:")
print(f"Nombre: {nombre_paciente}")
print(f"Edad: {edad} años")
print(f"Temperatura: {temperatura} °C")
print(f"Presión arterial: {presion_sistolica}/{presion_diastolica} mmHg")
print(f"Frecuencia cardíaca: {frecuencia_cardiaca} bpm")
print(f"Síntomas respiratorios: {tiene_sintomas_respiratorios}")
print(f"Dolor en el pecho: {tiene_dolor_pecho}")
print(f"Toma medicamentos: {toma_medicamentos}")
print()

print("🔍 EVALUACIÓN MÉDICA:")
print("=" * 25)

# Evaluación de signos vitales
signos_normales = True
alertas = []

# Evaluar temperatura
if temperatura >= 38.0:
    if temperatura >= 39.5:
        print("🚨 FIEBRE ALTA - Requiere atención inmediata")
        signos_normales = False
        alertas.append("Fiebre alta")
    else:
        print("⚠️ Fiebre moderada - Monitorear")
        alertas.append("Fiebre moderada")
elif temperatura <= 35.0:
    print("🚨 HIPOTERMIA - Requiere atención")
    signos_normales = False
    alertas.append("Hipotermia")
else:
    print("✅ Temperatura normal")

# Evaluar presión arterial
if presion_sistolica >= 140 or presion_diastolica >= 90:
    if presion_sistolica >= 160 or presion_diastolica >= 100:
        print("🚨 HIPERTENSIÓN SEVERA - Atención urgente")
        signos_normales = False
        alertas.append("Hipertensión severa")
    else:
        print("⚠️ Hipertensión leve - Monitorear")
        alertas.append("Hipertensión leve")
elif presion_sistolica <= 90 or presion_diastolica <= 60:
    print("⚠️ Presión baja - Monitorear")
    alertas.append("Hipotensión")
else:
    print("✅ Presión arterial normal")

# Evaluar frecuencia cardíaca
if frecuencia_cardiaca >= 100:
    if frecuencia_cardiaca >= 120:
        print("🚨 TAQUICARDIA SEVERA - Atención urgente")
        signos_normales = False
        alertas.append("Taquicardia severa")
    else:
        print("⚠️ Taquicardia leve - Monitorear")
        alertas.append("Taquicardia leve")
elif frecuencia_cardiaca <= 50:
    print("⚠️ Bradicardia - Monitorear")
    alertas.append("Bradicardia")
else:
    print("✅ Frecuencia cardíaca normal")

# Evaluar síntomas adicionales
if tiene_dolor_pecho:
    print("🚨 DOLOR EN EL PECHO - Evaluación cardiológica urgente")
    signos_normales = False
    alertas.append("Dolor torácico")

if tiene_sintomas_respiratorios:
    if temperatura >= 38.0:
        print("⚠️ Síntomas respiratorios con fiebre - Posible infección")
        alertas.append("Síntomas respiratorios con fiebre")
    else:
        print("ℹ️ Síntomas respiratorios - Evaluación necesaria")
        alertas.append("Síntomas respiratorios")

print()
print("🎯 EVALUACIÓN FINAL:")
print("=" * 20)

# Determinar nivel de prioridad
if not signos_normales or tiene_dolor_pecho:
    if (temperatura >= 39.5 or presion_sistolica >= 160 or 
        presion_diastolica >= 100 or frecuencia_cardiaca >= 120 or tiene_dolor_pecho):
        prioridad = "EMERGENCIA"
        color = "🔴"
    else:
        prioridad = "URGENTE"
        color = "🟡"
elif len(alertas) > 0:
    prioridad = "PRIORITARIO"
    color = "🟠"
else:
    prioridad = "NORMAL"
    color = "🟢"

print(f"{color} NIVEL DE PRIORIDAD: {prioridad}")
print()

# Recomendaciones específicas
if prioridad == "EMERGENCIA":
    print("🚨 ACCIÓN INMEDIATA REQUERIDA:")
    print("  • Atención médica urgente")
    print("  • Considerar llamar ambulancia")
    print("  • No esperar - ir a emergencias")
elif prioridad == "URGENTE":
    print("⚠️ ATENCIÓN MÉDICA NECESARIA:")
    print("  • Consultar médico hoy mismo")
    print("  • Monitorear signos vitales")
    print("  • Tener medicamentos a mano")
elif prioridad == "PRIORITARIO":
    print("📋 SEGUIMIENTO RECOMENDADO:")
    print("  • Agendar cita médica pronto")
    print("  • Monitorear síntomas")
    print("  • Mantener medicación actual")
else:
    print("✅ ESTADO NORMAL:")
    print("  • Continuar con cuidados habituales")
    print("  • Chequeo médico de rutina")

# Consideraciones especiales por edad
if edad >= 65:
    print()
    print("👴 CONSIDERACIONES POR EDAD:")
    print("  • Paciente de riesgo por edad avanzada")
    print("  • Monitoreo más frecuente recomendado")
    if toma_medicamentos:
        print("  • Revisar interacciones medicamentosas")

# Resumen de alertas
if alertas:
    print()
    print("📋 RESUMEN DE ALERTAS:")
    for i, alerta in enumerate(alertas, 1):
        print(f"  {i}. {alerta}")

print()
print("⚕️ Evaluación completada")
print("📞 En caso de emergencia, contactar servicios médicos")

¡Ahora tienes el poder de hacer que tu programa tome decisiones inteligentes! En el próximo capítulo, aprenderás a automatizar tareas repetitivas con bucles.


🧭 Navegación:

Capítulos de esta sección: