1. Afegir valors intercalant iteradors (6 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.
Es demana que dissenyeu la funció generadora especificada a continuació i la deseu en un fitxer anomenat afegeix.py:
- afegeix.afegeix_intercalant(it1, it2, f)¶
- Paràmetres:
it1 – iterador de valors que genera una seqüència S.
it2 – iterador qualsevol.
f – predicat o funció booleana que reb un valor del tipus de it1.
- Retorna:
iterador sobre la mateixa sequència S però en la qual s’han anat afegint els termes de la seqüència generada per it2. S’afegeix un terme de it2 darrera de cada terme de S que satisfà el predicat f. Suposarem que la seqüència generada per it2 té més elements que el nombre d’elements de S que satifan el predicat f.
Per exemple:
>>> from afegeix import afegeix_intercalant
>>> it1 = iter('abracadabra')
>>> it2 = map(lambda x: str(x), iter(range(23)))
>>> it = afegeix_intercalant(it1, it2, lambda x: x=='a')
>>> next(it)
'a'
>>> next(it)
'0'
>>> for x in it:
... print(x, end='-')
b-r-a-1-c-a-2-d-a-3-b-r-a-4-
>>> it1 = iter(['casa', 'por', 'festa', 'patata', 'sol', 'escola', 'llamp'])
>>> it2 = iter(['X', 'XX', 'XXX', 'XXXX', 'XXXXX', 'XXXXXX', 'XXXXXXX'])
>>> it = afegeix_intercalant(it1, it2, lambda x: len(x)%3==0)
>>> next(it)
'casa'
>>> next(it)
'por'
>>> next(it)
'X'
>>> for x in it:
... print(x, end='-')
festa-patata-XX-sol-XXX-escola-XXXX-llamp-
Disposeu d’un joc de proves més complet en el fitxer tests-afegeix.txt