Condicionales en Python
Hasta ahora tus programas ejecutan instrucciones una tras otra, sin importar los datos que reciben. Las estructuras condicionales son el primer paso para que tu código tome decisiones: ejecutar un bloque distinto según se cumpla o no una condición. Es la base sobre la que luego vas a construir bucles, funciones y, más adelante, los métodos de una clase.
Bienvenido
Ya sabes crear variables, identificar sus tipos y leer datos del usuario. Ahora falta la pieza que le da lógica a un programa: decidir qué hacer según el valor de esos datos. Eso es exactamente lo que hacen las estructuras condicionales.
Al finalizar esta guía sabrás escribir condiciones con if, elif y else, combinar condiciones con operadores de comparación y lógicos (and, or, not), anidar condicionales y evitar los errores más comunes al programar decisiones.
Todos los bloques con el encabezado Python son editables: presiona ✏️ Editar para modificar el código y ▶ Ejecutar para correrlo de verdad en tu navegador (usa Pyodide, un Python real compilado a WebAssembly). La primera ejecución tarda unos segundos porque descarga el intérprete.
📖 Aprende
Cómo Python evalúa condiciones y decide qué bloque ejecutar.
💻 Practica
Ejemplos editables y ejecutables en cada sección.
🎯 Domina
Operadores lógicos, anidamiento y los errores que evitan la mayoría de los principiantes.
¿Qué es una condición?
Una condición es cualquier expresión que Python puede evaluar como True o False. Ya las viste en la guía de Tipos de Datos: cualquier comparación (5 > 3, "a" == "b") produce un valor bool. Una estructura condicional usa ese resultado para decidir qué código ejecutar.
edad = 20
print(edad >= 18)
print(type(edad >= 18))
if no es más que: "si esta expresión vale True, ejecuta el bloque de abajo; si no, sáltalo".
La instrucción if
En Python, un bloque if se abre con dos puntos : y su contenido se marca con indentación (4 espacios). A diferencia de otros lenguajes, Python no usa llaves {}: la indentación es lo que define qué instrucciones pertenecen al bloque.
edad = 20
if edad >= 18:
print("Eres mayor de edad")
print("Puedes votar")
print("Este print siempre se ejecuta")
Salida:
Eres mayor de edad Puedes votar Este print siempre se ejecuta
Todas las líneas de un mismo bloque deben tener exactamente la misma indentación. Mezclar espacios y tabulaciones, o desalinear una línea por error, produce un IndentationError.
Si la condición es falsa, el bloque simplemente no se ejecuta y el programa continúa después de él:
edad = 15
if edad >= 18:
print("Eres mayor de edad")
print("Fin del programa")
Operadores de comparación
Estos operadores son los que normalmente escribes dentro de un if. Todos devuelven un valor bool.
| Operador | Significado | Ejemplo |
|---|---|---|
== | Igual a | edad == 18 |
!= | Distinto de | edad != 18 |
> | Mayor que | edad > 18 |
< | Menor que | edad < 18 |
>= | Mayor o igual que | edad >= 18 |
<= | Menor o igual que | edad <= 18 |
a = 10
b = 20
print(a == b)
print(a != b)
print(a < b)
print(a >= 10)
== con =
= asigna un valor a una variable; == compara dos valores. Es el error más común al escribir un if por primera vez, y lo vas a ver de nuevo en la sección de errores comunes.
else y elif
else define el bloque que se ejecuta cuando la condición del if es falsa. elif (abreviatura de "else if") te permite encadenar varias condiciones adicionales antes de llegar al else final.
edad = 15
if edad >= 18:
print("Eres mayor de edad")
else:
print("Eres menor de edad")
Con elif puedes evaluar varias condiciones en orden. Python evalúa de arriba hacia abajo y ejecuta solo el primer bloque cuya condición sea verdadera:
nota = 75
if nota >= 90:
print("Sobresaliente")
elif nota >= 70:
print("Aprobado")
elif nota >= 50:
print("En riesgo")
else:
print("Reprobado")
Si hubieras escrito primero elif nota >= 50 y luego elif nota >= 70, una nota de 75 caería en el primer elif que se cumple (>= 50) y nunca llegaría al segundo. Ordena las condiciones de la más específica a la más general.
Operadores lógicos: and, or, not
Cuando una decisión depende de más de una condición a la vez, combinas expresiones booleanas con and, or y not.
| Operador | Se cumple cuando… |
|---|---|
and | Ambas condiciones son verdaderas. |
or | Al menos una condición es verdadera. |
not | Invierte el valor de la condición. |
edad = 20
tiene_carnet = True
if edad >= 18 and tiene_carnet:
print("Puede conducir")
else:
print("No puede conducir")
dia = "sábado"
if dia == "sábado" or dia == "domingo":
print("Es fin de semana")
else:
print("Es día de semana")
en_mantenimiento = False
if not en_mantenimiento:
print("El sistema está disponible")
Python evalúa and/or con cortocircuito: en a and b, si a ya es False, ni siquiera evalúa b. Esto se usa mucho para evitar errores, por ejemplo: edad != "" and int(edad) >= 18.
Condicionales anidados
Un if puede contener otro if dentro de su bloque. Esto es útil cuando la segunda decisión solo tiene sentido después de confirmar la primera, pero abusar del anidamiento hace el código difícil de leer.
edad = 25
tiene_entrada = True
if edad >= 18:
if tiene_entrada:
print("Puede ingresar al evento")
else:
print("Necesita comprar una entrada")
else:
print("No cumple la edad mínima")
El ejemplo anterior también se puede escribir sin anidar, combinando condiciones con and: if edad >= 18 and tiene_entrada:. En general, si un anidamiento se puede aplanar con and/or, el código queda más legible.
Truthy y falsy dentro de un if
En la guía de Tipos de Datos viste que Python considera "falsy" a valores como 0, "" o []. Un if puede evaluar directamente cualquier valor, no solo comparaciones explícitas, porque Python lo convierte a bool internamente.
nombre = ""
if nombre:
print("Hola,", nombre)
else:
print("No ingresaste un nombre")
if nombre: es idiomático en Python, pero si necesitas distinguir 0 de None (por ejemplo, un saldo en cero no es lo mismo que "sin dato"), es más seguro comparar explícitamente: if nombre != "": o if valor is not None:.
Condicional en una línea (operador ternario)
Cuando el if/else solo decide qué valor asignar (no qué instrucciones ejecutar), Python permite escribirlo en una sola línea con la forma valor_si_true if condición else valor_si_false.
edad = 16
estado = "mayor de edad" if edad >= 18 else "menor de edad"
print(estado)
Es equivalente a escribir:
edad = 16
if edad >= 18:
estado = "mayor de edad"
else:
estado = "menor de edad"
print(estado)
El operador ternario es cómodo para decisiones simples de una sola línea. Si necesitas elif o varias instrucciones por rama, usa el if normal: forzar todo a una línea perjudica la legibilidad.
Errores comunes
❌ Usar = en vez de ==
if edad = 18: produce SyntaxError. Para comparar se usa ==, no =.
❌ Olvidar los dos puntos
if edad >= 18 sin : al final produce SyntaxError.
❌ Indentación inconsistente
Mezclar distintos niveles de indentación en el mismo bloque produce IndentationError.
❌ Encadenar if en vez de elif
Usar varios if seguidos (en lugar de elif) evalúa todas las condiciones aunque la primera ya se haya cumplido, lo que puede ejecutar más de un bloque por error.
Prueba el error
Ejecuta este bloque para observar en vivo el SyntaxError por usar = en lugar de ==.
edad = 18
if edad = 18:
print("Tiene 18 años")
Edita el bloque anterior y reemplaza edad = 18 (dentro del if) por edad == 18 para ver la diferencia.
Ejercicios Propuestos
Pon en práctica lo aprendido resolviendo los siguientes ejercicios directamente en el bloque editable.
- Pide la edad de una persona con
input()y usaif/elsepara imprimir si es mayor o menor de edad. - Dada una variable
nota, usaif/elif/elsepara imprimir "Sobresaliente" (≥90), "Aprobado" (≥70), "En riesgo" (≥50) o "Reprobado". - Combina dos condiciones con
andpara verificar si una persona puede votar (edad >= 18 and es_ciudadano). - Usa
orpara comprobar si un número es igual a3o a7. - Escribe un
ifanidado y luego reescríbelo usandoandpara comparar ambas versiones. - Escribe una expresión condicional en una línea (ternario) que asigne
"par"o"impar"según el resto de dividir un número entre 2.
Reto Final
Escribe un programa que clasifique el Índice de Masa Corporal (IMC) a partir de estos dos valores:
peso = 68(kg)altura = 1.70(metros)
El programa deberá:
- Calcular el IMC con la fórmula
peso / (altura ** 2). - Usar
if/elif/elsepara clasificarlo: menor a 18.5 "Bajo peso", entre 18.5 y 24.9 "Normal", entre 25 y 29.9 "Sobrepeso", 30 o más "Obesidad". - Imprimir el IMC redondeado a un decimal junto con la clasificación, usando un f-String.
IMC: 23.5 → Normal
Cheat Sheet
| Uso | Ejemplo |
|---|---|
| Condición simple | if x > 0: |
| Alternativa | if x > 0: ... else: ... |
| Varias condiciones | if ...: elif ...: else: ... |
| Ambas verdaderas | a and b |
| Al menos una verdadera | a or b |
| Invertir | not a |
| Condicional en una línea | x if cond else y |
| Comprobar pertenencia | if x in lista: |
¿Sabías que...?
🐍 Sin switch
Python no tuvo una instrucción switch tradicional hasta 2021: antes de eso (y todavía hoy) se usa if/elif encadenado para ese propósito.
🔗 Comparaciones encadenadas
Python permite escribir 0 <= nota <= 100 directamente, sin necesitar 0 <= nota and nota <= 100 como en otros lenguajes.
🎯 pass como marcador
Si necesitas dejar un bloque if vacío temporalmente, Python exige al menos una instrucción: para eso existe pass, que no hace nada.