2. Palíndrom (5 punts)¶
Avís
Per a resoldre aquest exercici no es poden fer servir iteracions (ni for ni while ), només les funcions predefinides de Python i les dels mòduls itertools, functools i operator. Tampoc es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar els elements dels iteradors.
En un fitxer anomenat palindrom.py deseu la funció especificada a continuació.
- palindrom.palindrom(it)¶
- Paràmetres:
it – un iterador sobre una seqüència de paraules (
str)- Retorna:
un
tupleformat per 2 iteradors (it1, it2) cadascun d’ells sobre una seqüència de tuples de la forma (paraula, longitud) on paraula és una paraula de it que sigui palíndrom i longitud és la seva longitud. A l’iterador it1 hi ha les paraules de it que són palíndroms i que tenen un nombre parell de lletres i a l’iterador it2 hi ha les paraules de it que són palíndroms i que tenen un nombre senar de lletres.
Una paraula és un palíndrom si quan es capgira queda igual. També es coneixen com capicues. Recordeu que donat un string s, l’expressió s[::-1] obté un string resultat de capgirar s.
Per exemple:
>>> it = iter(['carrac', 'flor', 'sorros', 'ara', 'arbre', 'civic'])
>>> it1, it2 = palindrom(it)
>>> iter(it1) is it1
True
>>> iter(it2) is it2
True
>>> next(it1)
('carrac', 6)
>>> next(it1)
('sorros', 6)
>>> next(it1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> list(it2)
[('ara', 3), ('civic', 5)]
>>> next(it2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Disposeu de més proves al fitxer test-palindrom.txt
Nota
Una possible solució al problema usa el mètode
itertools.tee() a més de les funcions estàndard de
python.