HDP115

Condicionales

Aprende a controlar el flujo de ejecución de tus programas Python utilizando estructuras condicionales como if, elif y else para tomar decisiones basadas en condiciones.

CE

Cristian Escalante

Última actualización: 19 de mayo de 2025

python
programación
control de flujo

Condicionales en Python

Las estructuras condicionales son una parte fundamental de cualquier lenguaje de programación. Permiten que un programa tome decisiones y ejecute diferentes bloques de código dependiendo de si ciertas condiciones son verdaderas o falsas. En Python, las estructuras condicionales son claras y fáciles de leer, lo que facilita la escritura de código que responde a diferentes situaciones.

La declaración if

La estructura condicional más básica en Python es la declaración if. Permite ejecutar un bloque de código solo si una condición específica es verdadera:

edad = 18

if edad >= 18:
    print("Eres mayor de edad")

En este ejemplo, el mensaje "Eres mayor de edad" se mostrará solo si la variable edad es mayor o igual a 18.

Sintaxis de la declaración if

La sintaxis general de una declaración if es:

if condición:
    # Bloque de código que se ejecuta si la condición es verdadera

Aspectos importantes:

  • La condición debe evaluar a un valor booleano (True o False)
  • Los dos puntos (:) al final de la línea de condición son obligatorios
  • El bloque de código que depende de la condición debe estar indentado (generalmente con 4 espacios)
  • Python usa la indentación para definir bloques de código, no llaves o palabras clave como otros lenguajes

La declaración else

La declaración else permite ejecutar un bloque de código alternativo cuando la condición del if es falsa:

edad = 16

if edad >= 18:
    print("Eres mayor de edad")
else:
    print("Eres menor de edad")

En este ejemplo, como la edad es 16 (menor que 18), se mostrará el mensaje "Eres menor de edad".

Sintaxis de if-else

if condición:
    # Código que se ejecuta si la condición es verdadera
else:
    # Código que se ejecuta si la condición es falsa

La declaración elif

Cuando necesitas comprobar múltiples condiciones, puedes usar la declaración elif (abreviatura de "else if"). Esto permite crear una cadena de condiciones que se evalúan en secuencia:

puntuación = 85

if puntuación >= 90:
    print("Calificación: A")
elif puntuación >= 80:
    print("Calificación: B")
elif puntuación >= 70:
    print("Calificación: C")
elif puntuación >= 60:
    print("Calificación: D")
else:
    print("Calificación: F")

En este ejemplo, como la puntuación es 85, se mostrará "Calificación: B". Las condiciones se evalúan en orden, y una vez que se encuentra una condición verdadera, se ejecuta su bloque de código y se omiten las demás condiciones.

Sintaxis de if-elif-else

if primera_condición:
    # Código si la primera condición es verdadera
elif segunda_condición:
    # Código si la primera condición es falsa y la segunda es verdadera
elif tercera_condición:
    # Código si las dos primeras condiciones son falsas y la tercera es verdadera
else:
    # Código si todas las condiciones anteriores son falsas

Puedes tener tantas cláusulas elif como necesites, pero solo un if al principio y un else opcional al final.

Condiciones anidadas

Es posible anidar declaraciones condicionales dentro de otras:

edad = 25
tiene_licencia = True

if edad >= 18:
    print("Eres mayor de edad")
    
    if tiene_licencia:
        print("Puedes conducir")
    else:
        print("No puedes conducir sin licencia")
else:
    print("Eres menor de edad, no puedes conducir")

En este ejemplo, como la edad es 25 y tiene licencia, se mostrarán los mensajes "Eres mayor de edad" y "Puedes conducir".

Expresiones condicionales compuestas

Puedes combinar múltiples condiciones utilizando operadores lógicos:

Operador and

El operador and requiere que todas las condiciones sean verdaderas:

edad = 25
ingresos = 30000

if edad >= 18 and ingresos >= 25000:
    print("Eres elegible para un préstamo")
else:
    print("No eres elegible para un préstamo")

Operador or

El operador or requiere que al menos una de las condiciones sea verdadera:

es_estudiante = True
es_jubilado = False

if es_estudiante or es_jubilado:
    print("Tienes derecho a un descuento")
else:
    print("No tienes derecho a un descuento")

Operador not

El operador not invierte el valor de verdad de una condición:

tiene_deuda = False

if not tiene_deuda:
    print("Puedes solicitar un nuevo préstamo")
else:
    print("Debes pagar tu deuda actual antes de solicitar un nuevo préstamo")

Combinación de operadores lógicos

Puedes combinar varios operadores lógicos en una misma condición:

edad = 25
ingresos = 30000
tiene_deuda = False

if edad >= 18 and ingresos >= 25000 and not tiene_deuda:
    print("Eres elegible para un préstamo")
else:
    print("No eres elegible para un préstamo")

Expresión condicional (operador ternario)

Python ofrece una forma concisa de escribir condiciones simples en una sola línea, conocida como expresión condicional o operador ternario:

edad = 20
estado = "mayor de edad" if edad >= 18 else "menor de edad"
print(f"Eres {estado}")

La sintaxis es:

valor_si_verdadero if condición else valor_si_falso

Esta construcción es útil para asignaciones condicionales simples, pero para lógica más compleja es mejor usar las estructuras if-elif-else tradicionales.

Evaluación de valores como condiciones

En Python, cualquier valor puede ser evaluado en un contexto booleano. Los siguientes valores se consideran falsos (False):

  • False
  • None
  • Cero de cualquier tipo numérico: 0, 0.0, 0j
  • Colecciones vacías: "", (), [], {}
  • Objetos que implementan __bool__() que devuelve False o __len__() que devuelve 0

Todos los demás valores se consideran verdaderos (True).

Esto permite escribir código más conciso:

nombre = ""

if nombre:
    print(f"Hola, {nombre}")
else:
    print("Por favor, introduce tu nombre")

En este ejemplo, como nombre es una cadena vacía (que se evalúa como False), se mostrará "Por favor, introduce tu nombre".

Patrones comunes con condicionales

Comprobación de existencia

usuario = {"nombre": "Ana", "edad": 28}

if "email" in usuario:
    enviar_email(usuario["email"])
else:
    print("No se puede enviar email, dirección no disponible")

Asignación condicional

# Forma tradicional
if edad >= 18:
    mensaje = "Eres mayor de edad"
else:
    mensaje = "Eres menor de edad"

# Forma concisa (operador ternario)
mensaje = "Eres mayor de edad" if edad >= 18 else "Eres menor de edad"

Ejecución condicional de funciones

def procesar_usuario(usuario):
    if usuario.es_admin:
        return mostrar_panel_admin(usuario)
    elif usuario.es_moderador:
        return mostrar_panel_moderador(usuario)
    else:
        return mostrar_panel_usuario(usuario)

Validación de entrada

entrada = input("Introduce un número: ")

if entrada.isdigit():
    numero = int(entrada)
    print(f"Has introducido el número {numero}")
else:
    print("Error: Debes introducir un número válido")

Ejemplos prácticos

Ejemplo 1: Calculadora simple

def calculadora():
    num1 = float(input("Introduce el primer número: "))
    num2 = float(input("Introduce el segundo número: "))
    operación = input("Introduce la operación (+, -, *, /): ")
    
    if operación == "+":
        resultado = num1 + num2
        print(f"Resultado: {num1} + {num2} = {resultado}")
    elif operación == "-":
        resultado = num1 - num2
        print(f"Resultado: {num1} - {num2} = {resultado}")
    elif operación == "*":
        resultado = num1 * num2
        print(f"Resultado: {num1} * {num2} = {resultado}")
    elif operación == "/":
        if num2 == 0:
            print("Error: No se puede dividir entre cero")
        else:
            resultado = num1 / num2
            print(f"Resultado: {num1} / {num2} = {resultado}")
    else:
        print("Operación no válida")

calculadora()

Ejemplo 2: Verificación de contraseña

def verificar_contraseña(contraseña):
    if len(contraseña) < 8:
        return "La contraseña debe tener al menos 8 caracteres"
    
    tiene_mayúscula = False
    tiene_minúscula = False
    tiene_número = False
    
    for caracter in contraseña:
        if caracter.isupper():
            tiene_mayúscula = True
        elif caracter.islower():
            tiene_minúscula = True
        elif caracter.isdigit():
            tiene_número = True
    
    if not tiene_mayúscula:
        return "La contraseña debe contener al menos una letra mayúscula"
    if not tiene_minúscula:
        return "La contraseña debe contener al menos una letra minúscula"
    if not tiene_número:
        return "La contraseña debe contener al menos un número"
    
    return "Contraseña válida"

# Prueba de la función
print(verificar_contraseña("abc123"))          # Muy corta
print(verificar_contraseña("abcdefgh"))        # Sin mayúsculas ni números
print(verificar_contraseña("ABCDEFGH"))        # Sin minúsculas ni números
print(verificar_contraseña("12345678"))        # Sin letras
print(verificar_contraseña("Abcdefg1"))        # Válida

Ejemplo 3: Categorización de IMC

def calcular_imc(peso, altura):
    imc = peso / (altura ** 2)
    
    if imc < 18.5:
        categoría = "Bajo peso"
    elif imc < 25:
        categoría = "Peso normal"
    elif imc < 30:
        categoría = "Sobrepeso"
    else:
        categoría = "Obesidad"
    
    return f"Tu IMC es {imc:.1f}, categoría: {categoría}"

# Prueba de la función
print(calcular_imc(70, 1.75))  # IMC = 22.9, Peso normal
print(calcular_imc(50, 1.70))  # IMC = 17.3, Bajo peso
print(calcular_imc(90, 1.80))  # IMC = 27.8, Sobrepeso
print(calcular_imc(100, 1.70)) # IMC = 34.6, Obesidad

Ejemplo 4: Juego de adivinanza

import random

def juego_adivinanza():
    número_secreto = random.randint(1, 100)
    intentos = 0
    máximo_intentos = 7
    
    print("¡Bienvenido al juego de adivinanza!")
    print(f"Estoy pensando en un número entre 1 y 100. Tienes {máximo_intentos} intentos.")
    
    while intentos < máximo_intentos:
        try:
            intento = int(input("\nIntroduce tu intento: "))
            intentos += 1
            
            if intento < 1 or intento > 100:
                print("Por favor, introduce un número entre 1 y 100.")
            elif intento < número_secreto:
                print(f"Demasiado bajo. Te quedan {máximo_intentos - intentos} intentos.")
            elif intento > número_secreto:
                print(f"Demasiado alto. Te quedan {máximo_intentos - intentos} intentos.")
            else:
                print(f"¡Felicidades! Has adivinado el número {número_secreto} en {intentos} intentos.")
                return
        except ValueError:
            print("Por favor, introduce un número válido.")
    
    print(f"\n¡Has agotado tus {máximo_intentos} intentos! El número secreto era {número_secreto}.")

juego_adivinanza()

Mejores prácticas

1. Mantén las condiciones simples

Si una condición es demasiado compleja, considera dividirla en partes más pequeñas o usar variables intermedias:

# Difícil de leer
if edad >= 18 and (es_estudiante or tiene_descuento_especial) and no_tiene_deuda:
    # código

# Más legible
es_adulto = edad >= 18
tiene_beneficios = es_estudiante or tiene_descuento_especial
elegible = es_adulto and tiene_beneficios and no_tiene_deuda

if elegible:
    # código

2. Evita condiciones anidadas profundas

Demasiadas condiciones anidadas hacen que el código sea difícil de seguir:

# Difícil de seguir
if condición1:
    if condición2:
        if condición3:
            # código
        else:
            # código
    else:
        # código
else:
    # código

# Mejor enfoque: usar guardas de retorno temprano
if not condición1:
    return resultado1
if not condición2:
    return resultado2
if not condición3:
    return resultado3

# código principal aquí

3. Usa el orden adecuado en condiciones múltiples

Cuando uses múltiples condiciones con and u or, coloca primero las condiciones que son más probables de determinar el resultado final o que son más rápidas de evaluar:

# Mejor rendimiento si es_admin es raro
if es_admin or (tiene_permiso and está_activo):
    # código

4. Aprovecha la evaluación en cortocircuito

Python evalúa las expresiones lógicas de izquierda a derecha y se detiene tan pronto como el resultado final se puede determinar:

# Si usuario es None, no se evaluará usuario.está_activo
if usuario and usuario.está_activo:
    # código

5. Evita comparaciones explícitas con True y False

# No recomendado
if es_válido == True:
    # código

# Recomendado
if es_válido:
    # código

# No recomendado
if es_válido == False:
    # código

# Recomendado
if not es_válido:
    # código

Ejercicios prácticos

  1. Escribe un programa que determine si un año es bisiesto. Un año es bisiesto si es divisible por 4, excepto aquellos divisibles por 100 pero no por 400.
  2. Crea una función que clasifique un triángulo como equilátero, isósceles o escaleno según las longitudes de sus lados.
  3. Implementa un sistema de calificación que convierta puntuaciones numéricas (0-100) a letras (A, B, C, D, F) según las reglas estándar.
  4. Desarrolla un programa que determine si un número es primo.
  5. Crea un validador de direcciones de correo electrónico que verifique si una cadena tiene el formato básico de un email válido.

En la próxima lección, exploraremos las estructuras de bucles en Python, que nos permitirán repetir bloques de código de manera eficiente.

Comentarios y Documentación
Aprende a documentar tu código Python correctamente utilizan...
Bucles en Python
Aprende a utilizar estructuras de repetición como for y whil...
Referencias
Real Python. Conditional Statements in Python. https://realpython.com/python-conditional-statements/
Programiz. Python if...else Statement. https://www.programiz.com/python-programming/if-elif-else

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos SQL

Aprende los conceptos básicos de SQL

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025