Lección 4 de 12 · Nivel 1: Básico

Condicionales en Python: if, elif, else y match

En esta lección
  1. if: ejecutar algo solo si se cumple una condición
  2. if / else: dos caminos
  3. if / elif / else: varios caminos
  4. Condiciones compuestas: and, or, not
  5. Valores "verdaderos" y "falsos"
  6. Condicionales anidados
  7. El operador ternario: if en una línea
  8. match: comparar contra muchos valores (Python 3.10+)
  9. Ejemplo completo: calculadora de envío de una tienda online
  10. Resumen
Lo que lograrás en esta lección
  • 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:

  1. La condición termina con dos puntos :.
  2. Las instrucciones que dependen del if van indentadas (4 espacios). Ese es el bloque.
  3. 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)
El orden de las condiciones importa

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?

  • Aprobado
  • Notable
  • Aprobado y Notable

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?

  • True
  • False
  • Da error

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?

  • "0" (el texto cero)
  • [] (una lista vacía)
  • " " (un espacio)

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, elif y else terminan en : y su bloque va indentado.
  • Solo se ejecuta el primer bloque cuya condición es verdadera: cuida el orden.
  • Combina condiciones con and, or y not; compara con None usando is.
  • Para muchos valores concretos, match es 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.

¿Quieres tu certificado gratis?

Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.

Inscribirme gratis