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