Python básico

Condicionales: que el programa decida

Lección 5 de 8 · 16 min

Que el programa tome caminos distintos

Hasta ahora tus programas hacían siempre lo mismo. Con if el programa compara y decide qué hacer según el resultado. Es lo que convierte un cálculo en una regla de negocio.

El if más simple
compra = 150000

if compra > 100000:
    print("Aplica envio gratis")

print("Gracias por su compra")
Resultado
Aplica envio gratis
Gracias por su compra

Los espacios del principio NO son decoración: son la sintaxis. En Python, lo que está indentado (corrido a la derecha) pertenece al if; lo que vuelve al margen se ejecuta siempre. Otros lenguajes usan llaves { }; Python usa la sangría, y si te equivocas responde IndentationError.

Se usan 4 espacios por nivel. El editor lo hace solo al pulsar Tab tras los dos puntos.

La sangría cambia el resultado
compra = 50000

# Version A: el mensaje esta DENTRO del if
if compra > 100000:
    print("Envio gratis")
    print("Le llega en 24 horas")

# Version B: el segundo mensaje esta FUERA
if compra > 100000:
    print("Envio gratis")
print("Le llega en 24 horas")
Resultado
Le llega en 24 horas

Con una compra de 50.000 la condición es falsa. En la versión A no se imprime nada; en la B se imprime "Le llega en 24 horas" igual, porque esa línea quedó fuera del if. Un espacio de diferencia y el programa miente al cliente.

Los operadores de comparación

== y !=

== pregunta si son iguales; != si son distintos.

⚠️ Dos iguales, no uno. Un solo = asigna, no compara.

> < >= <=

Mayor, menor, mayor o igual, menor o igual. Igual que en matemáticas.

if edad >= 18:

and · or · not

Combinan condiciones. and exige que se cumplan todas; or, que se cumpla al menos una.

if compra > 100000 and cliente_activo:

in

Pregunta si algo está contenido dentro de otra cosa.

if "@" in correo:

Varios caminos: if, elif, else

Cuando hay más de dos posibilidades se encadenan con elif (abreviatura de "else if"). Python las evalúa en orden y se queda con la primera que se cumpla: las demás ni las mira.

Descuento por monto de compra
compra = float(input("Valor de la compra: "))

if compra >= 1000000:
    descuento = 0.15
elif compra >= 500000:
    descuento = 0.10
elif compra >= 100000:
    descuento = 0.05
else:
    descuento = 0

valor_descuento = compra * descuento
total = compra - valor_descuento

print("Descuento aplicado:", descuento * 100, "%")
print("Total a pagar:", total)
Resultado
Valor de la compra: 650000
Descuento aplicado: 10.0 %
Total a pagar: 585000.0

El orden importa, y al revés no funciona. Si pusieras compra >= 100000 de primero, una compra de un millón entraría por ahí y se llevaría solo el 5%: nunca llegaría a la línea del 15%. Las condiciones se ordenan de la más exigente a la menos exigente.

Cómo escribir un condicional que no falle

  1. Escribe primero la regla en español

    "Si la compra pasa de un millón, 15%; si pasa de quinientos mil, 10%; si no, nada." Traducir una frase clara es fácil; traducir una idea confusa produce código confuso.

  2. Ordena de lo más exigente a lo menos

    Es el error más común y no da ningún mensaje: el programa funciona, solo que mal. Y en un descuento, "mal" significa dinero.

  3. Pon siempre un else

    Cubre el caso que no pensaste. Sin él, si ninguna condición se cumple, descuento nunca se crea y la línea siguiente falla con NameError.

  4. Prueba los bordes, no el centro

    Con 650.000 cualquier versión funciona. Prueba exactamente 100.000, 500.000 y 999.999: ahí es donde aparecen los errores de > contra >=.

¿Qué hace cada condición?

Piensa la respuesta y haz clic para comprobarla.

Preguntas que siempre salen

¿Cuántos elif puedo poner?

Los que quieras. Pero si pasas de cinco o seis, normalmente hay una forma mejor de resolverlo -con un diccionario, que verás en la lección 7- y el código queda mucho más corto.

¿Puedo poner un if dentro de otro if?

Sí, se llama anidar y se hace añadiendo otro nivel de sangría. Úsalo poco: tres niveles ya son difíciles de seguir. Casi siempre se puede aplanar combinando condiciones con and.

¿Qué considera Python "verdadero"?

Además de True: cualquier número distinto de cero y cualquier texto o lista que no esté vacío. Por eso if nombre: se lee como "si nombre tiene algo escrito".

Compruébalo tú mismo

Con los descuentos del ejemplo, ¿qué pasa si pones compra >= 100000 como primera condición?

¿Qué significa la sangría en Python?

¿Cuál es la comparación correcta?

Lo que sigue

Tu programa ya decide, pero atiende una compra. En la siguiente lección vas a procesar cientos de registros con las mismas líneas: los ciclos.

Siguiente: Ciclos: repetir sin copiar y pegar

Continuar ← Operadores y entrada del usuario