Lección 4 de 12 · Nivel 1: Básico
Condicionales en Python: if, elif, else y match
En esta lección
- if: ejecutar algo solo si se cumple una condición
- if / else: dos caminos
- if / elif / else: varios caminos
- Condiciones compuestas: and, or, not
- Valores "verdaderos" y "falsos"
- Condicionales anidados
- El operador ternario: if en una línea
- match: comparar contra muchos valores (Python 3.10+)
- Ejemplo completo: calculadora de envío de una tienda online
- Resumen
- Tomar decisiones con if, elif y else.
- Combinar condiciones con and, or y not.
- Entender los valores verdaderos y falsos.
- Usar el operador ternario y match.
Hasta ahora tus programas ejecutaban todas las líneas, siempre en el mismo orden. Con los condicionales pueden tomar decisiones: hacer una cosa si se cumple una condición y otra distinta si no. Es la primera de las estructuras de control (si quieres la visión general, lee qué son las estructuras de control).
if: ejecutar algo solo si se cumple una condición
edad = int(input("Edad: "))
if edad >= 18:
print("Eres mayor de edad")
print("Puedes registrarte")
print("Fin del programa")
Tres detalles de sintaxis que no pueden faltar:
- La condición termina con dos puntos
:. - Las instrucciones que dependen del
ifvan indentadas (4 espacios). Ese es el bloque. - La primera línea sin indentación marca el fin del bloque.
"Fin del programa"se muestra siempre.
if / else: dos caminos
saldo = 120
compra = 150
if saldo >= compra:
saldo -= compra
print(f"Compra realizada. Saldo: {saldo}")
else:
faltan = compra - saldo
print(f"Saldo insuficiente. Te faltan {faltan}")
if / elif / else: varios caminos
elif es la abreviatura de "else if". Python evalúa las condiciones de arriba abajo y ejecuta solo el primer bloque cuya condición sea verdadera:
nota = float(input("Nota (0-100): "))
if nota >= 90:
calificacion = "Excelente"
elif nota >= 75:
calificacion = "Bueno"
elif nota >= 60:
calificacion = "Suficiente"
else:
calificacion = "Insuficiente"
print(calificacion)
Si pusieras nota >= 60 en primer lugar, un 95 entraría ahí y saldría "Suficiente". Ordena de la condición más exigente a la menos exigente. Es el mismo principio que la función SI.CONJUNTO de Excel.
1. Con nota = 85, un if nota >= 60 imprime "Aprobado" y un elif nota >= 80 posterior imprime "Notable". ¿Qué se imprime?
Solo se ejecuta el primer bloque cuya condición es verdadera. Por eso conviene ordenar de la condición más exigente a la menos exigente.
Condiciones compuestas: and, or, not
edad = 25
tiene_licencia = True
es_vip = False
compra = 180
if edad >= 18 and tiene_licencia:
print("Puede alquilar el auto")
if es_vip or compra > 150:
print("Envío gratis")
if not tiene_licencia:
print("Primero necesitas la licencia")
and: todas las condiciones deben ser verdaderas.or: basta con que una sea verdadera.not: invierte el valor.
Para rangos, Python permite comparaciones encadenadas, muy legibles: if 18 <= edad < 65:.
2. Con edad = 20 y tiene_entrada = False, ¿cuánto vale edad >= 18 and tiene_entrada?
and exige que las dos condiciones sean verdaderas, y tiene_entrada es False.
Valores "verdaderos" y "falsos"
En una condición, Python considera falsos: False, 0, 0.0, el texto vacío "", las colecciones vacías ([], {}) y None. Todo lo demás es verdadero. Esto permite escribir:
nombre = input("Nombre: ").strip()
if not nombre:
print("No escribiste ningún nombre")
3. ¿Cuál de estos valores se considera falso en un if?
Las colecciones vacías, 0, None y el texto vacío "" son falsos. "0" y " " son textos con contenido, así que son verdaderos.
Condicionales anidados
Puedes poner un if dentro de otro, aumentando la indentación:
if usuario_registrado:
if contrasena_correcta:
print("Bienvenido")
else:
print("Contraseña incorrecta")
else:
print("Usuario no encontrado")
Úsalos con moderación: más de dos o tres niveles hacen el código difícil de leer. A menudo se pueden combinar con and o reordenar.
El operador ternario: if en una línea
estado = "Aprobado" if nota >= 60 else "Reprobado"
envio = 0 if compra >= 150 else 12
Úsalo solo para decisiones simples de dos opciones.
match: comparar contra muchos valores (Python 3.10+)
Cuando comparas una misma variable contra varios valores concretos, match es más claro que una cadena de elif:
opcion = input("Elige 1, 2 o 3: ")
match opcion:
case "1":
print("Ver saldo")
case "2":
print("Transferir")
case "3":
print("Salir")
case _:
print("Opción no válida")
El caso _ funciona como "cualquier otro valor".
Ejemplo completo: calculadora de envío de una tienda online
total = float(input("Total de la compra: "))
zona = input("Zona (centro / periferia / provincia): ").strip().lower()
es_socio = input("¿Es socio? (s/n): ").strip().lower() == "s"
if es_socio or total >= 200:
envio = 0
elif zona == "centro":
envio = 8
elif zona == "periferia":
envio = 12
elif zona == "provincia":
envio = 20
else:
envio = None
if envio is None:
print("Zona no reconocida")
else:
print(f"Envío: {envio:.2f}")
print(f"Total a pagar: {total + envio:.2f}")
Observa la línea de es_socio: la comparación == "s" ya devuelve True o False, así que la guardamos directamente como booleano. Y para comparar con None se usa is.
Ejercicio práctico: clasificador de IMC
Pide el peso en kg y la estatura en metros, calcula el índice de masa corporal (peso / estatura ** 2) y muestra la categoría:
- Menos de 18,5: "Bajo peso"
- De 18,5 a menos de 25: "Peso normal"
- De 25 a menos de 30: "Sobrepeso"
- 30 o más: "Obesidad"
Si el usuario introduce una estatura de 0 o negativa, muestra un mensaje de error en lugar de calcular.
Ver solución
peso = float(input("Peso (kg): "))
estatura = float(input("Estatura (m): "))
if estatura <= 0:
print("La estatura debe ser mayor que 0")
else:
imc = peso / estatura ** 2
if imc < 18.5:
categoria = "Bajo peso"
elif imc < 25:
categoria = "Peso normal"
elif imc < 30:
categoria = "Sobrepeso"
else:
categoria = "Obesidad"
print(f"IMC: {imc:.1f} → {categoria}")
Nota: aquí el orden va de menor a mayor usando <; también es correcto, siempre que cada condición descarte a las anteriores. El IMC es solo un indicador orientativo, no un diagnóstico médico.
Resumen
if,elifyelseterminan en:y su bloque va indentado.- Solo se ejecuta el primer bloque cuya condición es verdadera: cuida el orden.
- Combina condiciones con
and,orynot; compara conNoneusandois. - Para muchos valores concretos,
matches más legible.
En la próxima lección: Bucles for y while en Python: range, break y continue. Verás recorrer colecciones, range(), acumuladores, while, break, continue y comprensión de listas.
Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.