Pregunta 1¿Cuál de los siguientes ejecuta el bloque de if not value:?
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
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.
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
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.
| Tipo | Tratado como False | Tratado como True (ejemplos) |
|---|---|---|
| int / float | 0, 0.0 | 1, -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"} |
| None | None | (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)
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.
# 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.
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")
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.
# 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:.
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")
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.
Verificación de conocimientos
Responde cada pregunta una a una.
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?