Patrones Comunes de Almacén
Hay ciertas tareas que repetirás sin importar el tipo de programa que estés escribiendo. No son curiosidades académicas. Son los Procedimientos Operativos Estándar del almacén, y conviene aprenderlos bien desde el principio.
En los ejemplos que siguen, almacen es esta lista de cajas por color:
almacen = ["ROJA", "AZUL", "ROJA", "TOXICO", "VERDE"]
1. El Acumulador (Suma Total)
El robot lleva una calculadora en la mano y va sumando precios a medida que recorre el almacén. La calculadora arranca en cero. Sin ese cero inicial, el total no significa nada.
total = 0 # <--- La calculadora empieza en cero
precios = [10, 20, 30]
for p in precios:
total += p # <--- Suma al total
2. El Contador
Contar cuántas cajas cumplen una condición es distinto a sumar sus valores. Aquí el robot no acumula cantidades, solo registra ocurrencias. Un trazo en el cuaderno por cada caja roja que encuentra.
cajas_rojas = 0
for caja in almacen:
if caja == "ROJA":
cajas_rojas += 1
3. La Búsqueda (Flag)
Una “bandera” es una variable booleana que arranca en False y se activa si el robot encuentra lo que busca. Sencillo en teoría. En la práctica, es la variable que más gente olvida inicializar antes del bucle.
hay_toxicos = False
for caja in almacen:
if caja == "TOXICO":
hay_toxicos = True
break # ¡Alerta! No necesitas seguir buscando
if hay_toxicos:
print("¡Llamen al equipo de limpieza!")
4. El Filtrado (List Comprehension)
Las cajas pasan por una cinta transportadora. Las buenas siguen su camino a una pila nueva; las tóxicas se quedan atrás. El almacén original no cambia, solo construyes una selección limpia al lado.
cajas_buenas = []
for caja in almacen:
if caja != "TOXICO":
cajas_buenas.append(caja)
(Esto es exactamente lo que hace una list comprehension, la versión compacta de este mismo patrón en una sola línea).
Cuidado: esa lista nueva es la regla, no un adorno. Nunca elimines elementos de una lista mientras la recorres con
for: el estante se compacta bajo los pies del robot y el robot se salta cajas sin avisarte. Si hay que descartar, se construye una lista nueva filtrada, exactamente como arriba.
5. El Récord (Máximo y Mínimo)
El quinto procedimiento estándar: encontrar la caja más pesada. El robot carga el primer valor como “récord vigente” y lo va destronando.
pesos = [12, 40, 7, 33]
record = pesos[0] # el primer peso arranca como campeón
for peso in pesos:
if peso > record:
record = peso
print(record) # 40
La confesión: ya vienen hechos
Los patrones 1, 2 y 5 son tan universales que Python los trae de fábrica:
print(sum(pesos)) # 92: el acumulador
print(len(pesos)) # 4: el contador (de todos)
print(max(pesos)) # 40: el récord
print(min(pesos)) # 7: el récord inverso
Aun así vale la pena escribirlos a mano, porque sum() por sí sola no sabe “sumar solo las cajas rojas” ni max() resolver lógicas con condiciones enredadas. Las funciones integradas cubren el caso simple; el patrón escrito a mano cubre todos los demás. Conocer ambos es lo que te deja elegir.
6. Pasillos Dentro de Pasillos (Bucles Anidados)
A veces la mercancía viene en dos niveles: pasillos que contienen estantes. Para visitar cada caja necesitas un bucle dentro de otro:
pasillos = [
["Martillo", "Sierra"], # pasillo A
["Tornillos", "Tuercas"], # pasillo B
]
for numero, pasillo in enumerate(pasillos):
for herramienta in pasillo:
print(f"Pasillo {numero}: {herramienta}")
# Pasillo 0: Martillo
# Pasillo 0: Sierra
# Pasillo 1: Tornillos
# Pasillo 1: Tuercas
La regla de lectura: el bucle de adentro da todas sus vueltas por cada vuelta del de afuera. Dos pasillos por dos herramientas son cuatro visitas. Funciona, pero la cuenta crece rápido: tres niveles de anidación son señal de que el problema pide otra estructura, o repartir el trabajo en piezas más pequeñas.