Módulo 1 · Lección 10 de 59
La instrucción if
Cómo ejecutar unas líneas solo cuando se cumple una condición, y por qué la sangría decide qué está dentro del bloque.
Ya sabes formular preguntas que dan True o False. Lo que falta es que el programa haga algo distinto según la respuesta. Esa es la primera forma de control de flujo, y con ella tus programas dejan de ser una lista de pasos siempre igual para convertirse en algo que reacciona a los datos.
La forma básica#
edad = 20
if edad >= 18:
print("Eres mayor de edad.")Eres mayor de edad.Tres piezas, y las tres son obligatorias:
- La palabra
if, seguida de un espacio y de la condición. - Dos puntos al final de la línea.
- Debajo, el bloque de líneas que se ejecutan si la condición es verdadera, desplazadas cuatro espacios a la derecha.
Los dos puntos son la señal de "aquí abajo viene un bloque". Los verás en todas las estructuras del lenguaje: if, while, for, def, class. Cuando escribas dos puntos, la línea siguiente va siempre sangrada.
El bloque puede tener varias líneas#
Todo lo que esté sangrado al mismo nivel pertenece al bloque y se ejecuta junto:
saldo = 1200.50
retirada = 300
if retirada <= saldo:
saldo = saldo - retirada
print(f"Retirada aceptada: {retirada:.2f} €")
print(f"Saldo restante: {saldo:.2f} €")
print("Operación terminada.")Retirada aceptada: 300.00 €
Saldo restante: 900.50 €
Operación terminada.Las tres primeras líneas están dentro. La última no: está pegada al margen izquierdo, así que se ejecuta siempre, pase lo que pase con el if. La sangría es lo único que decide qué está dentro y qué está fuera. En otros lenguajes eso se marca con llaves y la sangría es decoración; aquí es parte de la sintaxis.
Qué pasa si la condición es falsa#
Nada. Python se salta el bloque entero y continúa por la primera línea que vuelva al margen:
temperatura = 12
if temperatura > 30:
print("Hace calor.")
print("Fin del informe.")Fin del informe.No hay error ni aviso. El bloque simplemente no ocurre, y eso tiene una consecuencia que conviene tener presente:
La condición no tiene que ser una comparación#
Esto sorprende al principio: entre if y los dos puntos puede ir cualquier valor, no solo una comparación. Python le aplica bool() por su cuenta y actúa según el resultado. Y ya sabes qué es falso para bool():
print(bool(0), bool(""), bool(None), bool("0"), bool(0.0))False False False True FalseAsí que estos dos if significan lo mismo, y el segundo es el que se escribe en la práctica:
articulos = 3
if articulos != 0:
print(f"Tienes {articulos} artículos en el carrito.")
if articulos:
print(f"Tienes {articulos} artículos en el carrito.")Tienes 3 artículos en el carrito.
Tienes 3 artículos en el carrito.El caso más útil es comprobar si un texto está vacío. if nombre: se lee como "si hay nombre":
nombre = input("¿Cómo te llamas? ").strip()
if nombre:
print(f"Hola, {nombre}.")¿Cómo te llamas? Erwin
Hola, Erwin.Y como strip() deja vacía una cadena que solo tenía espacios, la combinación cubre también al usuario que pulsa Intro sin escribir nada o escribe tres espacios.
Un ejemplo completo#
PRECIO_ENTRADA = 12.00
edad = int(input("Edad: "))
socio = input("¿Eres socio? (s/n) ").strip().lower()
precio = PRECIO_ENTRADA
descuentos = ""
if edad < 18:
precio = precio * 0.5
descuentos = descuentos + "menor "
if socio == "s":
precio = precio - 2
descuentos = descuentos + "socio "
print()
print(f"{'Precio base:':<16}{PRECIO_ENTRADA:>8.2f} €")
print(f"{'Descuentos:':<16}{descuentos.strip():>8}")
print(f"{'Total:':<16}{precio:>8.2f} €")Edad: 15
¿Eres socio? (s/n) s
Precio base: 12.00 €
Descuentos: menor socio
Total: 4.00 €Fíjate en que los dos if son independientes: se comprueban los dos y se pueden cumplir los dos a la vez. Cuando las alternativas sean excluyentes necesitarás else y elif, que es la lección siguiente.