Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.