Python: estructuras condicionales con if, elif y else
Un programa no tiene por qué hacer siempre lo mismo.
Hasta ahora hemos trabajado con instrucciones que se ejecutan una detrás de otra: pedimos datos, hacemos operaciones y mostramos un resultado. Pero muchos programas necesitan tomar decisiones.
Por ejemplo:
- mostrar un mensaje solo si se cumple una condición;
- elegir entre dos caminos posibles;
- clasificar un resultado entre varias alternativas;
- comprobar varias condiciones antes de actuar.
En Python, esas decisiones se construyen principalmente con if, elif y else.
1. Una condición produce una respuesta lógica
Una estructura condicional parte de una expresión que Python puede evaluar como verdadera o falsa.
Por ejemplo:
edad = 20
edad >= 18
La expresión:
edad >= 18
produce un valor booleano:
True
Si edad valiera 15, el resultado sería:
False
La estructura condicional utiliza precisamente ese resultado para decidir si ejecuta o no un bloque de instrucciones.
2. La estructura if
La forma más sencilla es:
if condición:
instrucciones
Por ejemplo:
sueldo = 3500
if sueldo > 3000:
print("Esta persona debe abonar impuestos")
Python evalúa primero:
sueldo > 3000
Si el resultado es True, ejecuta el bloque sangrado que aparece debajo del if.
Si el resultado es False, ese bloque se omite y el programa continúa después.

La idea puede resumirse así:
Si se cumple la condición, ejecuta este bloque. Si no, continúa.
3. El sangrado no es decoración
En Python, el sangrado indica qué instrucciones pertenecen al bloque controlado por el if.
temperatura = 32
if temperatura > 30:
print("Hace calor")
print("Conviene hidratarse")
print("Fin del programa")
Las dos primeras llamadas a print() están dentro del if porque tienen sangrado.
La última no lo está:
print("Fin del programa")
Por tanto, se ejecutará siempre, se cumpla o no la condición.
Esto es importante: en Python no utilizamos llaves para delimitar estos bloques. La indentación forma parte de la sintaxis del programa.
4. Dos caminos: if ... else
A veces no queremos simplemente ejecutar algo cuando se cumple una condición. Queremos elegir entre dos posibilidades.
La estructura es:
if condición:
instrucciones_si_se_cumple
else:
instrucciones_si_no_se_cumple
Por ejemplo:
numero1 = int(input("Introduce el primer valor: "))
numero2 = int(input("Introduce el segundo valor: "))
if numero1 > numero2:
print(numero1, "es mayor")
else:
print(numero2, "es mayor o igual")
Solo se ejecuta uno de los dos bloques.

La estructura responde a una pregunta:
¿Se cumple la condición?
- Sí → ejecuta el bloque del
if. - No → ejecuta el bloque del
else.
Después, ambos caminos vuelven a unirse y el programa continúa.
5. Varias alternativas: if ... elif ... else
Cuando existen más de dos posibilidades, podemos utilizar elif.
nota = 7
if nota >= 9:
print("Sobresaliente")
elif nota >= 7:
print("Notable")
elif nota >= 5:
print("Aprobado")
else:
print("Suspenso")
Python evalúa las condiciones de arriba abajo.
En cuanto encuentra una condición verdadera, ejecuta ese bloque y deja de comprobar los elif siguientes.
Con nota = 7:
nota >= 9
es False.
Después:
nota >= 7
es True.
Por tanto, se ejecuta:
print("Notable")
y las alternativas posteriores ya no se evalúan.

6. El orden de las condiciones importa
Observa este código:
nota = 9
if nota >= 5:
print("Aprobado")
elif nota >= 7:
print("Notable")
elif nota >= 9:
print("Sobresaliente")
La primera condición ya es verdadera:
nota >= 5
Así que Python imprime:
Aprobado
y termina la cadena.
Las condiciones siguientes también serían verdaderas, pero ya no llegan a evaluarse.
Por eso, cuando varias condiciones pueden cumplirse a la vez, debemos ordenar correctamente las alternativas.
En este ejemplo, lo adecuado sería empezar por la condición más restrictiva:
if nota >= 9:
print("Sobresaliente")
elif nota >= 7:
print("Notable")
elif nota >= 5:
print("Aprobado")
else:
print("Suspenso")
No basta con escribir condiciones correctas. También hay que pensar en qué orden se comprobarán.
Compruébalo tú mismo
Antes de ver el resultado, intenta predecir qué imprimirá Python. El recurso muestra después el recorrido real y por qué una condición demasiado general puede impedir que se alcancen las siguientes.
7. else es la alternativa restante
else no lleva condición.
Representa todos los casos que no han coincidido con las condiciones anteriores.
edad = 15
if edad >= 18:
print("Mayor de edad")
else:
print("Menor de edad")
También puede aparecer al final de una cadena de elif:
dia = "lunes"
if dia == "sábado":
print("Es fin de semana")
elif dia == "domingo":
print("Es fin de semana")
else:
print("Es un día laborable")
Si no necesitamos hacer nada en el caso restante, podemos omitir else.
8. Combinar condiciones con and, or y not
Una decisión puede depender de más de una condición.
and: deben cumplirse todas
edad = 20
ingresos = 1200
if edad > 16 and ingresos >= 1000:
print("Debe tributar")
else:
print("No debe tributar")
Para entrar en el primer bloque, las dos condiciones deben resultar verdaderas.
or: basta con que se cumpla una
dia = "domingo"
if dia == "sábado" or dia == "domingo":
print("Es fin de semana")
else:
print("Es un día laborable")
not: invierte una condición
tiene_permiso = False
if not tiene_permiso:
print("Acceso denegado")
not False se convierte en True.

9. Condicionales anidados
Una estructura condicional puede contener otra estructura condicional.
Por ejemplo:
edad = 20
tiene_dni = True
if edad >= 18:
if tiene_dni:
print("Puedes votar")
else:
print("Necesitas un DNI para votar")
else:
print("Eres menor de edad")
El segundo if solo llega a evaluarse si antes se ha cumplido:
edad >= 18
Eso permite tomar decisiones dentro de otras decisiones.

10. ¿elif o un if anidado?
No son exactamente lo mismo.
Utilizamos elif cuando estamos eligiendo una alternativa entre varias posibilidades del mismo nivel:
if nota >= 9:
print("Sobresaliente")
elif nota >= 7:
print("Notable")
elif nota >= 5:
print("Aprobado")
else:
print("Suspenso")
Utilizamos un if anidado cuando una segunda decisión solo tiene sentido después de que se haya cumplido una primera condición:
if edad >= 18:
if tiene_dni:
print("Puedes votar")
En el primer caso clasificamos.
En el segundo, comprobamos un requisito y, dentro de él, comprobamos otro.
11. Un caso algo más completo
Supongamos que queremos decidir si una persona debe tributar según dos datos:
- debe ser mayor de 16 años;
- debe tener unos ingresos mensuales iguales o superiores a 1000 €.
Podemos escribir:
edad = int(input("Edad: "))
ingresos = float(input("Ingresos mensuales: "))
if edad > 16 and ingresos >= 1000:
print("Debe tributar")
else:
print("No debe tributar")
Aquí aparecen juntos varios elementos que ya conocemos:
input()recoge los datos;int()yfloat()los convierten;- los operadores relacionales construyen condiciones;
andcombina esas condiciones;if / elsedecide qué bloque ejecutar.
El programa deja de ser una simple secuencia lineal: su recorrido depende de los datos introducidos.
12. Errores frecuentes
Olvidar los dos puntos
Incorrecto:
if edad >= 18
print("Mayor de edad")
Correcto:
if edad >= 18:
print("Mayor de edad")
Sangrar mal el bloque
if edad >= 18:
print("Mayor de edad")
Python necesita que las instrucciones pertenecientes al bloque estén indentadas.
Confundir = con ==
if dia = "sábado":
= sirve para asignar un valor.
Para comparar usamos:
if dia == "sábado":
Ordenar mal los elif
Si una condición demasiado general aparece antes que otra más específica, puede impedir que la segunda llegue a evaluarse.
Escribir varias condiciones independientes cuando solo debe ejecutarse una opción
No es lo mismo:
if nota >= 5:
print("Aprobado")
if nota >= 7:
print("Notable")
que:
if nota >= 7:
print("Notable")
elif nota >= 5:
print("Aprobado")
En el primer caso pueden ejecutarse ambos if.
En el segundo, solo se ejecutará una de las ramas.
13. Ideas esenciales
ifejecuta un bloque solo cuando una condición resulta verdadera.elserepresenta la alternativa cuando las condiciones anteriores no se cumplen.elifpermite comprobar varias alternativas en orden.- En una cadena
if / elif / else, se ejecuta como máximo una rama. - El orden de las condiciones puede cambiar el resultado.
and,orynotpermiten construir condiciones más complejas.- El sangrado indica qué instrucciones pertenecen a cada bloque.
- Un condicional puede contener otro condicional.
elify la anidación resuelven problemas distintos.- Leer un condicional correctamente consiste en seguir el mismo orden en que Python evalúa las condiciones.
14. Una idea para quedarse
Una estructura condicional no pregunta simplemente:
«¿Es esto verdadero o falso?»
La pregunta realmente útil es:
«Si esto es verdadero, ¿qué camino debe seguir ahora el programa?»
Aprender a programar condicionales consiste en aprender a diseñar esos caminos con claridad.
Ponlo en práctica
Continúa con Python: ejercicios interactivos de estructuras condicionales: ocho problemas de dificultad creciente para escribir, ejecutar y corregir tus propias decisiones en Python, con una solución orientativa disponible cuando la necesites.
Abrir los ejercicios ↗






