Café y Código

4. Condicionales: Tomando Decisiones 🚦

Las condiciones son el corazón de la lógica: el programa elige qué hacer según si algo es verdadero (True) o falso (False). En Python la indentación (espacios) marca qué código “pertenece” a cada if.

1) Solo if — cinco mini ejemplos

Si la condición es cierta, se ejecuta el bloque indentado. Si no, Python sigue después del ifsin imprimir nada de ese bloque (no hay else).

cinco_solo_if.py
PYTHON
1# --- 1) Comparación numérica ---
2temp = 32
3if temp > 30:
4 print("Hace mucho calor")
5
6# --- 2) Igualdad ---
7codigo = "OK"
8if codigo == "OK":
9 print("Operación aceptada")
10
11# --- 3) Cadena vacía (falsy) ---
12mensaje = ""
13if mensaje:
14 print("Hay texto")
15# No imprime: "" se evalúa como False en un if
16
17# --- 4) Lista con elementos ---
18carrito = ["pan", "leche"]
19if len(carrito) > 0:
20 print("Hay productos en el carrito")
21
22# --- 5) Porcentaje aprobado ---
23nota = 85
24if nota >= 70:
25 print("Aprobado")

2) ifelse — cinco ejemplos

Dos caminos: si la condición es verdadera, un bloque; si no, el otro.

cinco_if_else.py
PYTHON
1# --- 1) Mayoría de edad ---
2edad = 16
3if edad >= 18:
4 print("Mayor de edad")
5else:
6 print("Menor de edad")
7
8# --- 2) Par o impar ---
9n = 7
10if n % 2 == 0:
11 print("Es par")
12else:
13 print("Es impar")
14
15# --- 3) Acceso por contraseña ---
16clave = "python123"
17if clave == "python123":
18 print("Acceso permitido")
19else:
20 print("Contraseña incorrecta")
21
22# --- 4) Stock mínimo ---
23stock = 3
24if stock >= 5:
25 print("Hay suficiente stock")
26else:
27 print("Reponer pronto")
28
29# --- 5) Descuento simple ---
30precio = 100
31if precio > 50:
32 print("Aplica envío gratis")
33else:
34 print("Paga envío")

3) ifelifelse — cinco ejemplos

Varias condiciones en cascada: Python evalúa de arriba abajo y ejecuta el primer bloque cuya condición sea True. Si ninguna coincide, va al else (si existe).

cinco_if_elif_else.py
PYTHON
1# --- 1) Saludo por hora ---
2hora = 15
3if hora < 12:
4 print("Buenos días")
5elif hora < 20:
6 print("Buenas tardes")
7else:
8 print("Buenas noches")
9
10# --- 2) Calificación por nota ---
11nota = 82
12if nota >= 90:
13 print("A")
14elif nota >= 80:
15 print("B")
16elif nota >= 70:
17 print("C")
18else:
19 print("Necesitas repasar")
20
21# --- 3) Tamaño de pizza ---
22tam = "M"
23if tam == "S":
24 print("Pequeña")
25elif tam == "M":
26 print("Mediana")
27elif tam == "L":
28 print("Grande")
29else:
30 print("Tamaño no válido")
31
32# --- 4) Día laborable ---
33dia = "sábado"
34if dia in ("lunes", "martes", "miércoles", "jueves", "viernes"):
35 print("Día laboral")
36elif dia in ("sábado", "domingo"):
37 print("Fin de semana")
38else:
39 print("Día desconocido")
40
41# --- 5) IMC simplificado (solo categoría) ---
42peso_kg = 70
43altura_m = 1.75
44imc = peso_kg / (altura_m ** 2)
45if imc < 18.5:
46 print("Bajo peso")
47elif imc < 25:
48 print("Normal")
49elif imc < 30:
50 print("Sobrepeso")
51else:
52 print("Obesidad")

4) Cinco ejemplos con and (Y)

and: todas las condiciones unidas deben ser verdaderas a la vez.

cinco_and.py
PYTHON
1# --- 1) Edad y permiso ---
2edad = 17
3con_permiso = True
4if edad >= 18 and con_permiso:
5 print("Conduce solo")
6else:
7 print("No cumple ambas condiciones")
8
9# --- 2) Usuario y contraseña ---
10user = "ana"
11pwd = "secreto"
12if user == "ana" and pwd == "secreto":
13 print("Login OK")
14
15# --- 3) Rango numérico (entre dos valores) ---
16x = 15
17if x >= 10 and x <= 20:
18 print("x está entre 10 y 20")
19
20# --- 4) Lista no vacía y primer elemento ---
21nums = [3, 1, 4]
22if len(nums) > 0 and nums[0] > 0:
23 print("Hay números y el primero es positivo")
24
25# --- 5) String no vacío y longitud mínima ---
26nick = "pythonista"
27if nick and len(nick) >= 5:
28 print("Nick válido (no vacío y 5+ caracteres)")

5) Cinco ejemplos con or (O)

or: si al menos una condición es verdadera, el resultado es verdadero.

cinco_or.py
PYTHON
1# --- 1) Fin de semana ---
2dia = "sábado"
3if dia == "sábado" or dia == "domingo":
4 print("Es fin de semana")
5
6# --- 2) Descuento: estudiante o jubilado ---
7es_estudiante = True
8es_jubilado = False
9if es_estudiante or es_jubilado:
10 print("Aplica descuento")
11
12# --- 3) Transporte: bici o caminar ---
13tiene_bici = False
14puede_caminar = True
15if tiene_bici or puede_caminar:
16 print("Puede ir al parque")
17
18# --- 4) Código de error aceptable ---
19codigo = 404
20if codigo == 200 or codigo == 201:
21 print("Petición exitosa")
22else:
23 print("Revisar respuesta del servidor")
24
25# --- 5) Idioma soportado ---
26lang = "es"
27if lang == "es" or lang == "en" or lang == "pt":
28 print("Idioma disponible en la app")

6) Combinados: and, or y paréntesis

Python evalúa and antes que or en expresiones largas. Si no estás seguro, usá paréntesis para que el lector (y tú) entienda el orden.

combinados.py
PYTHON
1pago_ok = True
2stock = 4
3es_vip = False
4
5# VIP puede comprar aunque stock sea bajo, o si hay stock y pagó:
6if es_vip or (stock >= 1 and pago_ok):
7 print("Venta autorizada")
8
9# Rango: número entre 1 y 10, pero no el 7
10n = 5
11if (n >= 1 and n <= 10) and n != 7:
12 print("Válido y distinto de 7")
13
14# Login: usuario correcto Y (email verificado O es cuenta antigua)
15usuario_ok = True
16email_verificado = False
17cuenta_antigua = True
18if usuario_ok and (email_verificado or cuenta_antigua):
19 print("Acceso concedido")

7) None y not — varios ejemplos

None significa “sin valor”. Para comparar con None usá is None ois not None (es el estilo recomendado en Python). not invierte:not TrueFalse.

none_y_not.py
PYTHON
1# --- None (1): variable aún sin asignar resultado ---
2respuesta = None
3if respuesta is None:
4 print("Aún no hay respuesta del servidor")
5
6# --- None (2): clave opcional en diccionario ---
7config = {"tema": "oscuro"}
8if config.get("idioma") is None:
9 print("Idioma por defecto: español")
10
11# --- None (3): función sin return explícito devuelve None ---
12def buscar_usuario(id):
13 if id < 0:
14 return None
15 return {"id": id, "nombre": "Ana"}
16
17u = buscar_usuario(-1)
18if u is None:
19 print("Usuario no encontrado")
20
21# --- not (1): booleano en False ---
22logueado = False
23if not logueado:
24 print("Iniciá sesión para continuar")
25
26# --- not (2): lista vacía (falsy) ---
27carrito = []
28if not carrito:
29 print("El carrito está vacío")
30
31# --- not (3): negar una comparación ---
32edad = 15
33if not (edad >= 18):
34 print("Menor de edad (equivalente a edad < 18)")
35
36# --- not (4): evitar doble negación confusa; a veces es más claro invertir la lógica ---
37bloqueado = True
38if not bloqueado:
39 print("Puedes escribir en el muro")
40else:
41 print("Cuenta bloqueada")
42
43# --- Combinación: None + not ---
44opcional = None
45if opcional is not None:
46 print("Hay valor:", opcional)
47else:
48 print("Sin valor (None)")

8) Pertenencia: in

Comprueba si un valor está dentro de una lista, tupla, string, etc.

pertenencia.py
PYTHON
1fruta = "manzana"
2carrito = ["peras", "manzanas", "uvas"]
3
4if fruta in carrito:
5 print("Ya lo tenemos")
6else:
7 print("Falta comprarlo")

9) Expresión condicional (if en una línea)

Para asignar un valor u otro según una condición simple.

ternario.py
PYTHON
1edad = 18
2estado = "Adulto" if edad >= 18 else "Menor"
3print(estado)

10) Menú de opciones en consola

Un patrón muy común es mostrar opciones con print(), leer la elección coninput() y usar una cadena de if / elif / else. Así el usuario “navega” por tu programa sin interfaz gráfica.

menu_opciones.py
PYTHON
1print("=== CAFETERÍA ===")
2print("1) Café")
3print("2) Té")
4print("3) Jugo")
5print("4) Salir")
6
7opcion = input("Elegí un número (1-4): ").strip()
8
9if opcion == "1":
10 print("Preparando café ☕")
11elif opcion == "2":
12 print("Preparando té 🍵")
13elif opcion == "3":
14 print("Sirviendo jugo 🧃")
15elif opcion == "4":
16 print("¡Hasta luego!")
17else:
18 print("Opción no válida. Probá de nuevo con 1, 2, 3 o 4.")

Tip: input() siempre devuelve texto (str). Por eso comparamos con "1" y no con 1. Si quieres número, usáint(input("...")) dentro de un try/except (lo verás más adelante con errores).

11) Ejemplo: máquina dispensadora

Igual idea que el menú, pero con precios, stock y comprobaciones: ¿alcanza el dinero?, ¿hay producto?, ¿código válido? Todo encadenado con condicionales.

dispensadora.py
PYTHON
1# Precios en monedas (ejemplo simple)
2PRECIO_AGUA = 100
3PRECIO_SNACK = 250
4PRECIO_GASEOSA = 300
5
6stock_agua = 3
7stock_snack = 1
8stock_gaseosa = 0 # agotado
9
10print("=== DISPENSADORA ===")
11print("A) Agua — $", PRECIO_AGUA, " (stock:", stock_agua, ")")
12print("B) Snack — $", PRECIO_SNACK, " (stock:", stock_snack, ")")
13print("C) Gaseosa — $", PRECIO_GASEOSA, "(stock:", stock_gaseosa, ")")
14
15eleccion = input("Elegí A, B o C: ").strip().upper()
16dinero = int(input("¿Cuánto dinero insertás? "))
17
18if eleccion == "A":
19 if stock_agua <= 0:
20 print("No hay agua. Elegí otra opción.")
21 elif dinero < PRECIO_AGUA:
22 print("Falta dinero. Necesitas al menos $", PRECIO_AGUA, sep="")
23 else:
24 print("¡Toma tu agua! 💧")
25 vuelto = dinero - PRECIO_AGUA
26 if vuelto > 0:
27 print("Tu vuelto: $", vuelto, sep="")
28elif eleccion == "B":
29 if stock_snack <= 0:
30 print("No hay snacks.")
31 elif dinero < PRECIO_SNACK:
32 print("Falta dinero. Necesitas al menos $", PRECIO_SNACK, sep="")
33 else:
34 print("¡Snack entregado! 🍫")
35elif eleccion == "C":
36 if stock_gaseosa <= 0:
37 print("Gaseosa agotada.")
38 elif dinero < PRECIO_GASEOSA:
39 print("Falta dinero. Necesitas al menos $", PRECIO_GASEOSA, sep="")
40 else:
41 print("¡Gaseosa fría! 🥤")
42else:
43 print("Letra inválida. Usá A, B o C.")

Fijate cómo el if exterior elige el producto y el interior responde a tres preguntas: ¿hay stock?, ¿alcanza el dinero?, si todo ok → entregar (y opcionalmente calcular vuelto). Puedes extenderlo con un bucle while para que la máquina no termine tras una sola compra (lo harás en la lección de bucles).

Siguiente paso: match / case

Para ramificar como un switch de otros lenguajes (Python 3.10+), tienes la lección dedicada:5. match / case →

🐍 Desafío: El portero de la disco PRO

Crea una variable tengo_entrada (True/False) y otra variable edad. Escribe un if que diga "Pasa" solo si eres mayor de 18 y además tienes entrada (usa and).

👁️ Ver solución sugerida
portero.py
PYTHON
1edad = 20
2tengo_entrada = True
3
4if edad >= 18 and tengo_entrada:
5 print("Adelante, ¡pasa!")
6else:
7 print("No puedes entrar.")

Pon a prueba lo aprendido

Responde el quiz cuando te sientas cómodo con if, else, elif, and y or.

Dato curioso: Primera versión pública en 1991; Guido van Rossum. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.