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.