3. Fins on puc escoltar (3 punts)¶
Avís
Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.
Al mòdul llistes_reproduccio (fitxer
llistes_reproduccio.py), desa la funció següent, que pots
implementar com a funció generadora o bé utilitzant el mòdul
itertools i les funcions predefinides de Python:
- llistes_reproduccio.fins_on(llista_rep, temps_disp)¶
Genera la llista de cançons que pots escoltar amb el temps disponible.
- Paràmetres:
llista_rep – iterador de tuples amb el títol, l’autor i la durada de la cançó
temps_disp (datetime.timedelta) – temps disponible per escoltar música
- Retorna:
iterador de les cançons de llista_rep que pots escoltar amb temps_disp temps disponible. Més concretament, el màxim de cançons del començament de llista_rep tals que la durada acumulada sigui inferior a temps_disp
- Tipus de retorn:
iterador de tuples amb el títol, l’autor i la durada acumulada d’aquesta cançó i de totes les anteriors
Per exemple:
>>> from datetime import timedelta >>> from pprint import pprint >>> lr1 = [ ... ("Una lluna a l'aigua", "Txarango", timedelta(minutes=4, seconds=27)), ... ("Volcans", "Buhos", timedelta(minutes=3, seconds=32)), ... ("Coti x Coti", "The Tyets", timedelta(minutes=2, seconds=27)), ... ] >>> ilr1 = iter(lr1) >>> td1 = timedelta(minutes=8) >>> lrfao1 = fins_on(ilr1, td1) >>> iter(lrfao1) is lrfao1 True >>> r1 = list(lrfao1) >>> pprint(r1) [("Una lluna a l'aigua", 'Txarango', datetime.timedelta(seconds=267)), ('Volcans', 'Buhos', datetime.timedelta(seconds=479))] >>> r1[-1][2] < td1 True
Disposeu d’un joc de proves més complet en el fitxer
test-fins_on.txt.