Aprende leyendo en orden

if / elif / else y ramificación avanzada

Aprende los condicionales de Python con if / elif / else, el operador ternario y patrones avanzados de ramificación.

Lo básico de if e if not

if condición: ejecuta el bloque solo cuando la condición es True — es la construcción de ramificación más básica. Para negar una condición, antepón not, como en if not condición:.

not es el operador que invierte True y False, así que frases como «cuando no es …» o «cuando no está vacío» se escriben de forma natural.

# if: se ejecuta solo cuando la condición es True
is_logged_in = True
if is_logged_in:
    print("Hola")
# Salida: Hola

# if not: invierte la condición antes de evaluar
is_logged_in = False
if not is_logged_in:
    print("Por favor inicia sesión")
# Salida: Por favor inicia sesión

# Combinar con expresiones de comparación
cart = []
if not cart:
    print("Tu carrito está vacío")
# Salida: Tu carrito está vacío

Comprueba si un usuario ha verificado su correo.

① Define email_verified = False.

② Usa if email_verified: para imprimir «Gracias por usar nuestro servicio» cuando esté verificado.

③ Usa if not email_verified: para imprimir «Por favor completa la verificación de correo» cuando no lo esté.

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

Escribir ramificaciones múltiples con elif y else

Para manejar varias ramas, usa elif y else.

elif es la abreviatura de else if — cuando la condición de if es False, Python prueba la siguiente condición, y si ninguna coincide, se ejecuta el else final.

Cómo se evalúan if / elif / else
Inicioif cond1bloque 1elif cond2bloque 2elsebloque 3TrueFalseTrueFalsesi no

Las condiciones se evalúan de arriba hacia abajo. Solo se ejecuta la primera que da True, y el resto se omite. Si ninguna es True, se ejecuta else.

# Elegir una instrucción según un semáforo
signal = "YELLOW"

if signal == "GREEN":
    print("Avanza")
elif signal == "YELLOW":
    print("Avanza con precaución")
elif signal == "RED":
    print("Detente")
else:
    print("Señal desconocida")
# Salida: Avanza con precaución

Cambia el mensaje en pantalla según el role del usuario.

① Asigna role = "member".

② Imprime «Puedes acceder al panel de administración» cuando role == "admin", «Puedes acceder a tu panel» cuando role == "member", «Por favor inicia sesión» cuando role == "guest", en caso contrario «Rol desconocido».

Editor Python

Ejecutar el código para ver el resultado

elif se evalúa de arriba abajo

Si escribes if age >= 0: ... elif age >= 20: ..., la condición más amplia va primero, así que la posterior nunca coincide. En ramificaciones múltiples, enumera primero las condiciones más estrictas.

Usar el valor mismo como condición (veracidad)

Una condición de if no se limita a expresiones de comparación como == — puedes poner ahí un valor por sí mismo. Python lo convertirá a bool entre bambalinas, tratando lo «vacío» o 0 como False y todo lo demás como True.

Veracidad de los valores
0 / "" /[] / {} / Noneconversión a boolFalsetiene contenidoconversión a boolTrue
TipoTratado como FalseTratado como True (ejemplos)
int / float0, 0.01, -1, 3.14
str"" (cadena vacía)"a", "0" (cualquier cadena no vacía es True)
list / tuple / set[], (), set() (colecciones vacías)[1], (0,), {0}
dict{} (dict vacío){"key": "value"}
NoneNone(cualquier valor distinto de None)

Este comportamiento te permite escribir comprobaciones como «¿la entrada está vacía?» o «¿hay algo en el carrito?» de forma muy concisa.

En lugar de if len(cart) > 0:, basta con if cart: — significa lo mismo. Es un estilo muy pythónico.

# No ejecutar una búsqueda cuando la palabra clave esté vacía
search_query = ""
if search_query:
    print(f"Buscando: {search_query}")
else:
    print("Por favor introduce una palabra clave")
# Salida: Por favor introduce una palabra clave

# Pasar al pago cuando el carrito tenga al menos un artículo
cart = ["manzana", "pan"]
if cart:
    print(f"Continuando con {len(cart)} artículo(s)")
# Salida: Continuando con 2 artículo(s)

Comprueba si una dirección de envío ha sido registrada.

① Asigna shipping_address = "" (una cadena vacía).

② Usa if shipping_address: — imprime «Listo para enviar» cuando haya dirección, en caso contrario imprime «Por favor registra tu dirección».

③ Reasigna shipping_address a algo como "Calle Mayor 100, Madrid…" y vuelve a ejecutar el mismo if para confirmar que el resultado cambia.

Editor Python

Ejecutar el código para ver el resultado

Escribir if de una sola línea con el operador ternario

Cuando solo necesitas asignar uno de dos valores según una condición, no hace falta escribir 4 líneas de if / else — puedes hacerlo en una línea. Esto se llama operador ternario (o expresión condicional). La forma es valor_si_true if condición else valor_si_false.

Cómo leer el operador ternario
valor 1ifcondelsevalor 2
# 4 líneas con if / else normal
age = 25
if age >= 20:
    status = "adulto"
else:
    status = "menor"

# Una línea con el operador ternario
status = "adulto" if age >= 20 else "menor"
print(status)   # adulto

El truco está en usarlo solo para elecciones simples de dos opciones. Cuando las condiciones o los valores se vuelven largos, o tienes tres o más ramas, if / elif / else normal se lee mejor.

Cambia la etiqueta de envío según el total del pedido.

① Define total_price = 3200.

② Usando el operador ternario, asigna «Envío gratis» a shipping_label cuando total_price >= 5000, en caso contrario «Envío $5».

③ Imprime shipping_label.

Editor Python

Ejecutar el código para ver el resultado

Las comprobaciones de rango se pueden encadenar directamente

Las comprobaciones de rango como «de 0 a 100 inclusive» se pueden escribir encadenando operadores de comparación en lugar de usar and. El resultado se lee igual que una desigualdad matemática, lo que deja la intención muy clara.

score = 78

# Usando and
if score >= 0 and score <= 100:
    print("Puntaje válido")

# Forma encadenada (mismo significado)
if 0 <= score <= 100:
    print("Puntaje válido")

Decide si un puntaje de examen está dentro del rango válido (0–100).

① Define score = 78.

② Usando la comparación encadenada 0 <= score <= 100, imprime «Puntaje válido» cuando esté en rango, en caso contrario «Fuera de rango».

③ Reasigna score = 120 y vuelve a ejecutar la misma comprobación.

Editor Python

Ejecutar el código para ver el resultado

Inspeccionar tipo y valor (isinstance e is None)

Cuando quieras comprobar el tipo de un valor que contiene una variable, usa isinstance(valor, tipo). Pasa el valor primero y el tipo segundo — si el valor es una instancia de ese tipo, devuelve True.

price = 980
user_name = "ana"

print(isinstance(price, int))      # True
print(isinstance(user_name, str))  # True
print(isinstance(price, str))      # False

# Combinar con if para calcular solo cuando sea un número
if isinstance(price, int) and price > 0:
    tax_included = int(price * 1.1)
    print(tax_included)   # 1078

¿Qué es None?

None es el valor especial de Python que significa «sin valor». Representa cosas como «un resultado que aún no se ha obtenido», «un estado sin inicializar» o «lo que devuelve una función cuando no devuelve nada». Es el único valor que significa «nada», distinto de 0 o de una cadena vacía.

En qué se diferencia None de otros valores
0(número)""(cadena vacía)[](lista vacía)None(sin valor)
# Una función que no devuelve nada implícitamente devuelve None
def greet():
    print("hola")

result = greet()      # se imprime "hola"
print(result)         # None

# Un valor inicial que significa «aún no decidido»
selected_user = None
print(selected_user)  # None

Para comprobar si un valor es None, la forma pythónica es is None en lugar de ==. Como None es un único objeto en el programa, comparar si dos referencias apuntan al mismo objeto en memoria con is deja la intención más clara.

# Información de usuario desde una API (supongamos que aún no se ha obtenido)
user = None

if user is None:
    print("Información de usuario no cargada")
else:
    print(f"Hola, {user}")
# Salida: Información de usuario no cargada

# Para comprobar «no es None», usa `is not None`
score = 0
if score is not None:
    print(f"Puntaje: {score}")   # Puntaje: 0

0 y None son cosas distintas

Escribir if score: tratará score == 0 también como False. Cuando necesites distinguir «no introducido (None)» de «0 puntos», comprueba explícitamente con if score is None: o if score is not None:.

Comprueba la presencia y el tipo de la edad de un usuario obtenida desde una API.

① Define user_age = None.

② Si user_age is None, imprime «Edad no registrada»; en caso contrario, si isinstance(user_age, int) es True, imprime el valor de user_age.

③ Reasigna user_age = 29 y vuelve a ejecutar la misma comprobación.

Editor Python

Ejecutar el código para ver el resultado

Comprobar el contenido de colecciones con in / not in

Para comprobar si un valor está contenido en una lista, usa valor in colección. Lo opuesto — «no contenido» — es valor not in colección. Funciona con listas, tuplas, conjuntos y cadenas, y en los dict comprueba las claves.

allowed_roles = ["admin", "editor", "member"]
current_role = "member"

if current_role in allowed_roles:
    print("Acceso concedido")
else:
    print("Acceso denegado")
# Salida: Acceso concedido

# Comprobar si una subcadena aparece en una cadena
if "error" in "connection error: timeout":
    print("Detectada una línea de error")

# En un dict, `in` comprueba las claves
user = {"name": "ana", "role": "admin"}
if "email" not in user:
    print("Correo no registrado")

Comprueba el estado de publicación de un artículo de blog.

① Define published_slugs = ["python-intro", "sql-basics", "git-tips"].

② Define target = "git-tips".

③ Si target está en published_slugs, imprime «Publicado»; en caso contrario imprime «Borrador».

④ Cambia target a "draft-post" y vuelve a ejecutar la misma comprobación.

Editor Python

Ejecutar el código para ver el resultado

En este artículo cubrimos la ramificación avanzada con lo básico de if / if not, la lógica de varias ramas con elif / else, la veracidad que trata los valores vacíos y 0 como False, el operador ternario valor_1 if condición else valor_2, las comprobaciones de tipo y valor con isinstance e is None, y las comprobaciones de colecciones con in / not in.

En el siguiente artículo aprenderemos all() / any(), que te permiten comprobar si todos los elementos de una lista cumplen una condición en una sola llamada.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de los siguientes ejecuta el bloque de if not value:?

Pregunta 2¿Qué imprime este código?
age = 18
status = "adulto" if age >= 20 else "menor"
print(status)

Pregunta 3¿Cuál de los siguientes es la forma más recomendada de comprobar si un valor es None?