1. Faro

Nivel 7 · Depuración: los tamaños de canasta parecen demasiado pequeños

La solicitud

De Megan Collins, Directora de Ventas

“El script dice que nuestra canasta web promedio de esta mañana fue de $34.45. Revisé los pedidos y ni uno solo de la web fue menor de $50. Algo falla en las cuentas, ¿puedes arreglarlo?”

Tu objetivo

Corrige el código para que result sea un diccionario que asocie cada canal con el total promedio de sus pedidos (el total del canal dividido entre el número de pedidos de ese canal), redondeado a 2 decimales.

  • Guarda un dict en resultpendiente

Tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    La lección

    Un promedio es un total entre un conteo del mismo grupo

    Para promediar por grupo a mano, mantienes dos diccionarios lado a lado: un total acumulado y un conteo acumulado para cada clave. Una sola pasada por los pedidos llena ambos:

    for channel, total in orders:
        totals[channel] = totals.get(channel, 0) + total
        counts[channel] = counts.get(channel, 0) + 1
    # totals: web 344.45, app 226.48, marketplace 273.25
    # counts: web 4, app 4, marketplace 2

    El promedio de un canal es su total dividido entre su propio conteo. La web es 344.45 / 4 = 86.11. Dividir entre len(orders), que es 10, mezcla dos grupos: el dinero de la web con los pedidos de todos. Eso da 34.45, un número que no describe nada real. Los tres «promedios» erróneos incluso suman el promedio general de todos los pedidos ($84.42), lo que es una pista de que el denominador es compartido.

    Comprueba el sentido de cada promedio

    No necesitas leer el código para saber que el starter está roto. Un promedio siempre está entre el valor más pequeño y el más grande de su grupo. El pedido web más pequeño de esta mañana fue de $57.80, así que una canasta web promedio de $34.45 es imposible. La misma prueba sirve para cada canal:

    • los pedidos de app van de $38.40 a $95.10, así que el promedio de app debe estar en ese rango ($56.62 lo está);
    • marketplace tiene dos pedidos, $61.25 y $212.00, así que su promedio queda a medio camino, $136.62.

    Hacer este tipo de comprobación antes de enviar números toma segundos y evita correcciones vergonzosas.

    Por qué los conteos estaban «bien» pero sin usar

    Errores como este son comunes cuando el código se edita con el tiempo. Alguien añadió el diccionario counts correctamente, pero la línea de la división se había escrito antes y se quedó con len(orders). No falla nada, no hay error, y la salida tiene la forma correcta: un número por canal. Solo los valores son erróneos, por eso conviene mirar los números y no solo si el script se ejecuta.

    Errores comunes

    • Dividir entre el número total de filas en lugar del conteo del grupo.
    • Redondear los totales antes de dividir, lo que puede mover el último centavo.
    • Reiniciar totals = {} dentro del bucle, de modo que solo sobrevive el último pedido. Mantén los diccionarios vacíos encima del bucle.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.