Condicionales en Python: if, elif y else con ejercicios
Actualizado el 29 de septiembre de 2026
Hasta ahora, un programa ejecuta sus líneas una tras otra. Los condicionales le permiten tomar decisiones: hacer una cosa si se cumple una condición y otra si no. Son la base de casi cualquier regla de negocio: si el usuario es mayor de edad, si el pago fue aprobado, si la nota alcanza para aprobar.
En esta guía vas a ver if, else y elif, por qué importa el orden de las condiciones y cómo escribir condiciones claras. Si no recuerdas los operadores de comparación y and/or, revisa antes la guía de operadores.
if: hacer algo solo si se cumple una condición
temperatura = 30
if temperatura > 25:
print("Hace calor")
print("Esto se ejecuta siempre")La línea del if termina en dos puntos, y el bloque que depende de ella va con sangría (cuatro espacios, por convención). En Python la sangría no es decorativa: es lo que indica qué líneas están dentro del if. La primera línea sin sangría ya está fuera.
else: qué hacer si no se cumple
edad = 16
if edad >= 18:
print("Puedes votar")
else:
print("Todavía no puedes votar")Se ejecuta exactamente uno de los dos bloques, nunca ambos y nunca ninguno.
elif: varias alternativas
Cuando hay más de dos casos, elif (abreviación de "else if") agrega condiciones intermedias. Python las revisa de arriba hacia abajo y ejecuta solo la primera que se cumple; el resto se salta.
nota = 5.5
if nota >= 6.0:
concepto = "Muy bueno"
elif nota >= 5.0:
concepto = "Bueno"
elif nota >= 4.0:
concepto = "Suficiente"
else:
concepto = "Insuficiente"
print(concepto) # BuenoFíjate en que la segunda condición no necesita decir nota >= 5.0 and nota < 6.0: si llegó hasta ahí, es porque la primera no se cumplió, así que ya se sabe que la nota es menor que 6.0.
Valores verdaderos y falsos
La condición de un if no tiene por qué ser una comparación. Python trata como falsos el 0, el texto vacío "", las colecciones vacías y None; todo lo demás cuenta como verdadero. Por eso se puede escribir:
nombre = ""
if not nombre:
print("Falta el nombre")El if en una línea
Para elegir entre dos valores existe una forma corta, llamada expresión condicional:
edad = 17
estado = "mayor" if edad >= 18 else "menor"
print(estado) # menorÚsala solo para casos simples como este. Si la condición es larga o hay más de dos alternativas, un if normal se lee mucho mejor.
Errores comunes
Condiciones en el orden equivocado
nota = 6.5
if nota >= 4.0:
concepto = "Suficiente"
elif nota >= 6.0:
concepto = "Muy bueno" # nunca se llega aquí
print(concepto) # SuficienteUn 6.5 también es mayor o igual que 4.0, así que entra por la primera rama y las demás se saltan. Con condiciones que se solapan, ordénalas de la más exigente a la menos exigente.
Usar varios if en vez de elif
Con if separados, cada uno se evalúa por su cuenta, y un mismo valor puede entrar en varios: con la nota 6.5, tres if independientes (>= 6.0, >= 5.0, >= 4.0) se cumplirían los tres y el último en ejecutarse dejaría "Suficiente". Si los casos son excluyentes, encadénalos con elif.
IndentationError
Aparece cuando falta la sangría después de los dos puntos, o cuando las líneas de un mismo bloque no tienen la misma. Configura tu editor para que la tecla Tab inserte cuatro espacios y no mezcles tabs con espacios.
Comparar con True
if es_estudiante == True: funciona, pero sobra: es_estudiante ya es verdadero o falso. Escribe if es_estudiante: y, para el caso contrario, if not es_estudiante:.
Ejercicios resueltos
Intenta resolver cada ejercicio antes de abrir la solución: equivocarse y corregir es la parte que más enseña.
1.Positivo, negativo o cero
Escribe una función clasificar_numero(n) que devuelva "positivo", "negativo" o "cero" según el número recibido.
clasificar_numero(8)→"positivo"clasificar_numero(-3)→"negativo"clasificar_numero(0)→"cero"
def clasificar_numero(n):
...Ver soluciónOcultar solución
def clasificar_numero(n):
if n > 0:
return "positivo"
elif n < 0:
return "negativo"
else:
return "cero"Hay tres casos que no se solapan, así que el orden no afecta el resultado. El else cubre lo que queda: si no es mayor ni menor que 0, tiene que ser 0. return termina la función apenas se ejecuta, por lo que en la práctica también funcionaría con if separados, pero elif deja claro que los casos son excluyentes.
2.Concepto según la nota
Con la escala chilena de 1.0 a 7.0, escribe una función calificar(nota) que devuelva "Muy bueno" desde 6.0, "Bueno" desde 5.0, "Suficiente" desde 4.0 e "Insuficiente" bajo 4.0.
calificar(6.5)→"Muy bueno"calificar(5.0)→"Bueno"calificar(3.9)→"Insuficiente"
def calificar(nota):
...Ver soluciónOcultar solución
def calificar(nota):
if nota >= 6.0:
return "Muy bueno"
elif nota >= 5.0:
return "Bueno"
elif nota >= 4.0:
return "Suficiente"
else:
return "Insuficiente"Es el caso típico donde el orden importa: se parte por el umbral más alto. Cada elif sabe que las condiciones anteriores no se cumplieron, así que basta con el límite inferior. Revisa siempre los bordes: 5.0 debe dar "Bueno", y por eso la comparación es >= y no >.
3.Precio de una entrada
Un cine cobra $2.000 a los menores de 12 años, $2.500 a los mayores de 65 y $3.000 a los estudiantes; el resto paga $5.000. Si una persona cumple más de una condición, se aplica la primera de esa lista. Escribe precio_entrada(edad, es_estudiante).
precio_entrada(8, False)→2000precio_entrada(70, True)→2500precio_entrada(20, True)→3000precio_entrada(30, False)→5000
def precio_entrada(edad, es_estudiante):
...Ver soluciónOcultar solución
def precio_entrada(edad, es_estudiante):
if edad < 12:
return 2000
elif edad >= 65:
return 2500
elif es_estudiante:
return 3000
else:
return 5000El enunciado dice qué hacer cuando se cumple más de una condición: aplicar la primera de la lista. Por eso el orden del código sigue exactamente el orden del enunciado. Una persona de 70 años que además es estudiante paga $2.500, porque la condición de edad se revisa antes.
es_estudiante ya es un booleano, así que la condición es simplemente elif es_estudiante:.