circle-info
Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 5: Estructuras condicionales

Los programas verdaderamente útiles no siguen un camino único y lineal; necesitan adaptarse y reaccionar a diferentes situaciones. Para ello, deben ser capaces de tomar decisiones. Las estructuras condicionales son los mecanismos que permiten controlar el flujo de ejecución de un programa, evaluando condiciones que resultan ser True o False y ejecutando distintos bloques de código en consecuencia. Son la base para crear software inteligente y dinámico.

En Python encontramos las estructuras if, elif, else y la moderna match-case (desde Python 3.10), además del operador ternario para casos simples. Estas herramientas nos permiten controlar el flujo de ejecución de nuestros programas de manera precisa y eficiente.

5.1. Introducción: ¿Por qué necesitamos tomar decisiones?

Imagina un programa que siempre ejecutara exactamente las mismas instrucciones. Sería predecible, pero también inútil en la mayoría de situaciones reales. Los programas útiles necesitan adaptarse a diferentes circunstancias:

  • Un cajero automático debe verificar si el PIN es correcto

  • Un videojuego debe decidir si el jugador ha ganado o perdido

  • Una aplicación de temperatura debe mostrar si hace frío, calor o está templado

  • Un sistema de notas debe determinar si un estudiante ha aprobado

Las estructuras condicionales nos permiten crear estos comportamientos adaptativos mediante la evaluación de condiciones (expresiones que se evalúan como True o False).

El concepto de condición

Una condición es una expresión que Python puede evaluar como verdadera (True) o falsa (False). Algunos ejemplos:

# Condiciones simples
edad >= 18          # ¿Es mayor o igual a 18?
nombre == "Ana"     # ¿El nombre es exactamente "Ana"?
temperatura > 30    # ¿La temperatura es mayor a 30 grados?
len(password) >= 8  # ¿La contraseña tiene al menos 8 caracteres?

# Condiciones complejas
(edad >= 18) and (tiene_licencia == True)
(es_fin_de_semana) or (es_festivo)
not (saldo_cuenta < 0)

5.2. La instrucción if: La decisión básica

La estructura if es la forma más básica de toma de decisiones. Evalúa una condición y, si es True, ejecuta el bloque de código indentado que le sigue. La sintaxis siempre requiere dos puntos (:) al final de la condición y que el bloque de código subordinado esté indentado.

Sintaxis

Ejemplo de uso


5.3. La instrucción if-else: Alternativa binaria

La estructura if-else gestiona decisiones binarias, donde hay dos posibles caminos. Si la condición del if es True, se ejecuta su bloque de código. Si es False, se ejecuta el bloque de código de la cláusula else.

Sintaxis

Ejemplo de uso


5.4. La instrucción if-elif-else: Múltiples alternativas

Para gestionar múltiples condiciones mutuamente excluyentes, se utiliza la estructura if-elif-else (elif es una contracción de "else if"). Python evalúa las condiciones en orden: ejecuta el bloque de la primera condición que resulte True e ignora el resto de la cadena.

El orden de las cláusulas elif es crucial. Generalmente, se deben colocar de la más específica a la más general para evitar que una condición más amplia "capture" un caso que debería ser manejado por una más específica.

Sintaxis

Ejemplo de uso


5.5. El operador ternario: Decisión en una línia

El operador ternario es una forma compacta de escribir una estructura if-else simple en una sola línea.

Sintaxis

Ejemplo de uso

triangle-exclamation

5.6. La estructura match-case: Patrones avanzados (Python 3.10+)

Introducida en Python 3.10, la estructura match-case ofrece una alternativa potente y legible al if-elif-else, especialmente para la coincidencia de patrones. Es más versátil que la instrucción switch de otros lenguajes.

Permite comparar un valor con varios patrones:

  • Valores literales: Se pueden agrupar múltiples valores con el operador |.

  • Guardas: Se puede añadir una condición if a un case para refinar el patrón.

  • Estructuras de datos: Puede descomponer listas o tuplas.

  • Caso por defecto: El patrón case _ actúa como un comodín que coincide con cualquier valor si los casos anteriores no lo han hecho.

Sintaxis básica

Ejemplos con valores literales

Patrones con guardas (condiciones)

Patrones con estructuras de datos

Ejemplo práctico: Menú de aplicación


5.7. Anidamiento y condiciones complejas

Las estructuras condicionales se pueden anidar unas dentro de otras para crear lógicas más detalladas. Sin embargo, un anidamiento excesivo puede hacer que el código sea difícil de leer y mantener.

circle-check

Para crear condiciones más elaboradas, se utilizan los operadores lógicos and, or y not.


5.8. Caso práctico: Sistema de reservas

Este ejemplo combina varias estructuras condicionales para calcular el precio de una reserva de hotel.


Resumen del Capítulo

Las estructuras condicionales son herramientas fundamentales que permiten a nuestros programas tomar decisiones inteligentes. Has aprendido a usar if, elif, else, el operador ternario y la moderna estructura match-case para crear programas que se adapten a diferentes situaciones y respondan de manera apropiada a las condiciones del entorno.

💡 Conceptos Clave:

  • if: Ejecución condicional simple

  • if-else: Alternativa binaria (verdadero/falso)

  • if-elif-else: Múltiples alternativas mutuamente excluyentes

  • Operador ternario: Decisiones simples en una línea

  • match-case: Coincidencia de patrones avanzada (Python 3.10+)

  • Condiciones complejas: Uso de operadores lógicos and, or, not

  • Anidamiento: Estructuras condicionales dentro de otras

🤔 Preguntas de Reflexión:

  1. ¿Cuándo es preferible usar match-case en lugar de múltiples elif?

  2. ¿Qué problemas puede causar el orden incorrecto en una cadena if-elif?

  3. ¿En qué situaciones el operador ternario mejora la legibilidad del código?

  4. ¿Cómo puedes evitar el anidamiento excesivo en validaciones complejas?

🔧 Ejercicio Práctico:

Crea un programa que:

  1. Simule un sistema de login con múltiples intentos

  2. Implemente un calculador de tarifas de taxi con diferentes zonas y horarios

  3. Use match-case para procesar comandos de un chatbot simple

  4. Valide formularios complejos con múltiples campos y reglas

Una vez que nuestros programas pueden tomar decisiones, el siguiente paso es dotarlos de la capacidad de repetir acciones. Esto nos lleva al mundo de los bucles y las iteraciones.

Última actualización

¿Te fue útil?