P1 · Reporte semanal (S3 + S4 + S5)
funciones + listas de tuplas · ★★★Escribe reporte(ventas) que reciba una lista de tuplas (dia, monto) y devuelva total, promedio, mejor día y la lista de días bajo el promedio. Una lista vacía no debe causar error.
Tu programa debe cumplir estos casos de prueba:
| Entrada | Esperado |
|---|---|
| Semana de la S5 | (3600, 514.29, "sáb", ["lun", "mar", "mié", "dom"]) |
[] | (0, 0, None, []) |
Pista
Primero el caso borde (lista vacía). Luego un solo recorrido para total y máximo, y una comprensión para los días bajo el promedio.
Solución
def reporte(ventas):
"""Recibe [(dia, monto)] y devuelve (total, promedio, mejor_dia, dias_bajo_promedio)."""
if not ventas:
return 0, 0, None, []
total = 0
mejor_dia, mejor_monto = ventas[0]
for dia, monto in ventas:
total += monto
if monto > mejor_monto:
mejor_dia, mejor_monto = dia, monto
promedio = total / len(ventas)
bajos = [dia for dia, monto in ventas if monto < promedio]
return total, round(promedio, 2), mejor_dia, bajos
semana = [("lun", 340), ("mar", 410), ("mié", 380), ("jue", 520), ("vie", 610), ("sáb", 890), ("dom", 450)]
print(reporte(semana))
assert reporte([]) == (0, 0, None, [])
assert reporte([("lun", 100)]) == (100, 100.0, "lun", [])
(3600, 514.29, 'sáb', ['lun', 'mar', 'mié', 'dom'])