1. Paraules més llargues (5 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 els elements d’un iterador.

Donada una seqüència de paraules S i un enter n volem obtenir la subseqüència de paraules més llargues de S per trams de n paraules consecutives, és a dir la paraula més llarga de les n primeres, la més llarga de les n següents i així successivament.

Per exemple, per n=3, en la seqüència ocell pardal flor amic llum i arbre paravent adeu darrer, esperem la seqüència pardal amic paravent darrer, ja que pardal és la paraula més llarga de les 3 primeres, amic la més llarga de les 3 següents i així successivament. En cas d’empat, sempre ens interessa la primera de les paraules més llargues de cada tram, en l’exemple, pel tram amic llum i escollim amic. Fixeu-vos que volem també la paraula més llarga del tram final de S, encara que sigui de longitud inferior a n.

Es demana que, en un fitxer anomenat mestrams.py, hi deseu la funció generadora especificada a continuació:

mestrams.mes_llarga_tram(it, n)
Paràmetres:
  • it – iterador sobre una sèqüència de cadenes de caràcters (str).

  • n – enter que representa la longitud dels trams

Retorna:

iterador de la subseqüència de cadenes de caràcter de it més llargues de cada n paraules consecutives

Per exemple:

>>> it = iter('ocell pardal flor amic llum i arbre paravent adeu darrer'.split())
>>> it2 = mes_llarga_tram(it, 7)
>>> iter(it2) == it2
True
>>> next(it2)
'pardal'
>>> next(it2)
'paravent'
>>> next(it2, 'iterador exhaurit')
'iterador exhaurit'

>>> it = iter('ocell pardal flor amic llum i arbre paravent adeu darrer'.split())
>>> it2 = mes_llarga_tram(it, 12)
>>> next(it2)
'paravent'
>>> next(it2, 'iterador exhaurit')
'iterador exhaurit'

Disposeu d’un joc de proves més complet en el fitxer tests-mestrams.txt