La solicitud

De Laura Bennett, Directora de Finanzas
Tu objetivo
Asigna a result la longitud (un int) de la racha más larga de días consecutivos de daily_revenue cuyo valor sea al menos target (4000 cuenta como meta cumplida).
- Guarda un número en
resultpendiente
Tu código
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Laura, y por qué
La lección
Dos acumuladores a la vez
Una pregunta sobre rachas necesita un poco más que un total acumulado. Sigues dos números mientras recorres la lista en orden:
current, la longitud de la racha en la que estás ahora mismo;best, la racha más larga que has visto hasta ahora.
best = 0
current = 0
for revenue in daily_revenue:
if revenue >= target:
current += 1 # the run continues
else:
current = 0 # the run is broken
best = max(best, current)
current += 1 es la abreviatura de current = current + 1. max(best, current) devuelve el mayor de
los dos, así que best solo puede subir. El bucle tiene que visitar los días en orden de fecha, por eso
la lista ya está ordenada del 1 al 14 de diciembre. Una racha sobre datos desordenados no significa
nada.
Recorriendo diciembre
Día a día, la prueba de la meta da este patrón (✓ en o por encima de $4,000):
Dec 1 2 3 4 5 6 7 8 9 10 11 12 13 14
. ✓ ✓ . ✓ ✓ ✓ ✓ . ✓ ✓ ✓ ✓ ✓
current sube a 2, se reinicia el 4 de dic, sube a 4, se reinicia el 9 de dic y luego sube a 5 en el
último día. best termina en 5. Fíjate en que 11 de los 14 días estuvieron en meta, pero la pregunta es
por la racha más larga sin interrupciones, así que contar las marcas no basta.
Dónde suele romperse el código de rachas
La versión más tentadora actualiza best solo cuando termina una racha, dentro del else. Parece
ordenada, pero una racha que sigue en curso cuando la lista termina nunca se registra. Aquí la racha más
larga es justo esa, del 10 al 14 de dic, así que la versión ordenada responde 4. Actualizar best en
cada pasada, después del if/else, resuelve el final de la lista sin esfuerzo.
La otra trampa es el límite. «En o por encima de $4,000» significa >=. El 12 de dic los ingresos
fueron exactamente 4,000, así que con > la racha final se parte en dos y la respuesta vuelve a bajar a
4.
Errores comunes
- Actualizar
bestsolo cuando se rompe una racha y perder la racha final. - Usar
>cuando la regla dice «en o por encima de». - Contar todos los días en meta (11) en lugar de la racha consecutiva más larga.
- Olvidar reiniciar
currenta 0 al fallar, lo que convierte el conteo en un simple total.
¡Linterna encendida!
Practicaste: for loopaccumulatorstreaksmax
- Resuelto
- Sin pistas
- Al primer intento
