If, elif y else en Python: guía de decisiones

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
Imagem de um quadro negro com várias interrogações no lugar de lâmpadas, e uma lâmpada conectada no meio

Las estructuras if, elif y else permiten que un programa tome decisiones. En lugar de ejecutar siempre las mismas instrucciones, Python puede comparar valores, validar datos, elegir una acción y responder de manera diferente según cada situación. Comprender estas estructuras es esencial para menús, formularios, juegos, APIs, automatizaciones y reglas de negocio.

Antes de empezar, conviene repasar booleanos, operadores, input(), funciones y manejo de excepciones. También puedes consultar el tutorial oficial sobre if y la referencia oficial de sentencias condicionales.

La estructura básica

edad = 20

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

La expresión edad >= 18 produce True o False. El bloque indentado solo se ejecuta cuando el resultado es verdadero.

Añadir else

edad = 16

if edad >= 18:
    print("Acceso permitido")
else:
    print("Acceso denegado")

else no necesita condición. Representa todos los casos que no cumplieron el if.

Usar elif

nota = 7.5

if nota >= 9:
    resultado = "Excelente"
elif nota >= 7:
    resultado = "Aprobado"
elif nota >= 5:
    resultado = "Suficiente"
else:
    resultado = "Suspenso"

print(resultado)

Python evalúa de arriba hacia abajo y ejecuta el primer bloque verdadero. Después omite los demás. El orden es importante: primero deben aparecer las condiciones más específicas o exigentes.

Un error de orden

# Incorrecto
if nota >= 5:
    print("Aprobado")
elif nota >= 9:
    print("Excelente")

Una nota de diez cumple la primera condición y nunca alcanza el elif. Debes comprobar primero nota >= 9.

Comparaciones

temperatura = 25

if temperatura == 25:
    print("Exactamente 25")
if temperatura != 0:
    print("No es cero")
if temperatura < 30:
    print("Menor que 30")

Los operadores principales son ==, !=, <, <=, > y >=. No confundas =, que asigna, con ==, que compara.

Operadores lógicos

edad = 25
tiene_documento = True

if edad >= 18 and tiene_documento:
    print("Puede registrarse")

and exige que ambas condiciones sean verdaderas. or necesita al menos una. not invierte el valor.

es_admin = False
es_editor = True

if es_admin or es_editor:
    print("Puede editar")

if not es_admin:
    print("No tiene permisos de administrador")

Cortocircuito

Python deja de evaluar cuando ya conoce el resultado:

usuario = None

if usuario is not None and usuario["activo"]:
    print("Usuario activo")

Si usuario es None, la segunda parte no se ejecuta. El orden protege el acceso.

Valores truthy y falsy

Python interpreta algunos valores como falsos: False, None, cero y colecciones vacías.

nombre = input("Nombre: ").strip()

if nombre:
    print(f"Hola, {nombre}")
else:
    print("No escribiste un nombre")

Esta forma es clara cuando solo interesa saber si hay contenido. Si necesitas distinguir entre None, cero y cadena vacía, compara explícitamente.

Comprobar pertenencia

rol = "editor"
roles_permitidos = {"admin", "editor"}

if rol in roles_permitidos:
    print("Acceso permitido")

in funciona con strings, listas, tuplas, sets, diccionarios y otros iterables. En diccionarios comprueba claves.

Rangos

edad = 30

if 18 <= edad <= 65:
    print("Dentro del rango")

Python permite encadenar comparaciones. Es más legible que repetir la variable con and.

Condiciones anidadas

usuario_activo = True
rol = "editor"

if usuario_activo:
    if rol == "admin":
        print("Panel completo")
    else:
        print("Panel limitado")
else:
    print("Cuenta desactivada")

La anidación puede ser útil, pero demasiados niveles dificultan la lectura. Puedes combinar condiciones o usar retornos tempranos dentro de funciones.

Retornos tempranos

def puede_comprar(usuario, total):
    if usuario is None:
        return False
    if not usuario.get("activo"):
        return False
    if total <= 0:
        return False
    return True

Este patrón evita un bloque muy profundo y deja claras las causas de rechazo.

Validar entrada

texto = input("Edad: ").strip()

try:
    edad = int(texto)
except ValueError:
    print("Debes escribir un entero")
else:
    if edad < 0:
        print("La edad no puede ser negativa")
    elif edad < 18:
        print("Menor de edad")
    else:
        print("Mayor de edad")

if no sustituye a las excepciones cuando una conversión puede fallar.

print("1. Crear")
print("2. Buscar")
print("0. Salir")

opcion = input("Opción: ").strip()

if opcion == "1":
    print("Creando")
elif opcion == "2":
    print("Buscando")
elif opcion == "0":
    print("Saliendo")
else:
    print("Opción desconocida")

En un menú pequeño, if/elif es apropiado. En un sistema grande, un diccionario de funciones o match-case puede resultar más mantenible.

Comparar strings

respuesta = input("¿Continuar? ").strip().lower()

if respuesta in {"s", "si", "sí"}:
    print("Continuando")
elif respuesta == "n":
    print("Cancelado")
else:
    print("Respuesta inválida")

Normalizar con strip y lower reduce diferencias accidentales.

Comparar floats

Evita depender de igualdad exacta después de cálculos:

import math

resultado = 0.1 + 0.2
if math.isclose(resultado, 0.3):
    print("Son suficientemente cercanos")

Los floats usan representación binaria y pueden contener pequeñas diferencias.

Identidad frente a igualdad

resultado = None

if resultado is None:
    print("No hay resultado")

Usa is None y is not None. Para comparar valores normales utiliza ==.

Operador condicional

estado = "adulto" if edad >= 18 else "menor"

Es útil para una asignación sencilla. Evita anidarlo o incluir lógica compleja porque reduce la legibilidad.

Condiciones dentro de listas

numeros = [1, 2, 3, 4, 5]
pares = [numero for numero in numeros if numero % 2 == 0]

Aquí el if filtra elementos. Una comprensión no debe contener una lógica difícil de explicar.

Reglas de negocio

def calcular_envio(total, es_premium, zona):
    if total < 0:
        raise ValueError("Total inválido")
    if es_premium or total >= 100:
        return 0
    if zona == "internacional":
        return 20
    return 5

El orden expresa prioridades: primero validación, después envío gratuito y finalmente tarifas.

Pruebas

def test_envio_gratuito_por_total():
    assert calcular_envio(120, False, "local") == 0


def test_envio_premium():
    assert calcular_envio(20, True, "local") == 0


def test_envio_internacional():
    assert calcular_envio(20, False, "internacional") == 20

Prueba cada rama, incluidos límites exactos como 99.99 y 100.

Errores frecuentes

Los problemas habituales son usar = en vez de ==, ordenar mal los elif, olvidar la indentación, comparar floats exactamente, escribir condiciones siempre verdaderas y mezclar and y or sin paréntesis claros.

# Incorrecto
if rol == "admin" or "editor":
    print("Siempre se ejecuta")

# Correcto
if rol == "admin" or rol == "editor":
    print("Rol permitido")

La cadena "editor" por sí sola es verdadera.

Evitar condiciones demasiado largas

Extrae reglas con nombres descriptivos:

es_mayor = edad >= 18
tiene_acceso = rol in roles_permitidos
cuenta_valida = activo and not bloqueado

if es_mayor and tiene_acceso and cuenta_valida:
    print("Acceso concedido")

Los nombres convierten una expresión técnica en una explicación.

Cuándo usar match-case

match-case puede ser conveniente para analizar estructuras o muchos valores discretos. Para rangos, comparaciones y condiciones booleanas, if/elif/else suele ser más natural.

Conclusión

if, elif y else controlan las decisiones de un programa. Ordena las condiciones desde las más específicas, combina operadores lógicos con claridad y valida entradas antes de aplicar reglas. Reduce la anidación mediante funciones y retornos tempranos, prueba todas las ramas y evita expresiones ambiguas. Una condición bien escrita debe explicar con claridad cuándo ocurre cada acción.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Símbolo de repetição ao lado do logotipo do Python pensativo, representando o conceito de loops na programação em Python.
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Bucles en Python: for y while explicados con ejemplos

    Aprende bucles for y while en Python con range, enumerate, zip, break, continue, else, comprensiones, generadores y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    ícone de loop com o texto 'While' abaixo
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Bucles while en Python: guía práctica para principiantes

    Aprende bucles while en Python con condiciones, validación, menús, break, continue, else, centinelas, reintentos y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Manipulação de dados JSON em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    JSON en Python: leer, escribir y validar datos

    Aprende JSON en Python con load, loads, dump, dumps, archivos UTF-8, validación, APIs, Decimal, fechas y escritura segura.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Homem pensando à frente de um notebook com código de programação
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Indentación en Python: guía clara para principiantes

    Aprende indentación en Python, cuatro espacios, bloques, IndentationError, TabError, errores lógicos y configuración correcta del editor.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Logo do Python com símbolos de lista, tupla e dicionário
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Lista vs tupla vs set vs diccionario en Python

    Compara listas, tuplas, sets y diccionarios en Python según orden, mutabilidad, duplicados, búsquedas, conversiones y casos de uso.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Programador pensnado em frente à vários monitores com código na tela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    15 ejercicios de Python para principiantes con soluciones

    Practica Python con 15 ejercicios resueltos sobre entrada, condiciones, bucles, funciones, listas, diccionarios, archivos y validación.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026