1. Codificació (5 punts)

Avís

Per resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per desar tots els elements d’un iterador.

Tenim una sèrie P de parells (string, llista), on cada llista pot contenir elements de qualsevol tipus bàsic. Es vol aplicar una codificació de cada parell (s,l) de P, aplicant una regla senzilla:

  • per cada enter positiu n de l, caldrà generar un string que sigui el resultat de repetir n vegades l’string s.

  • per la resta d’elements de l que no siguin enters positius, s’ha de generar un string amb tants asteriscs com la longitud de s.

Per exemple, si un parell d’entrada és:

('manel', [3,'hi',-2, 2,1])

la tupla codificada per aquest parell produirà els següents elements:

'manelmanelmanel'
'*****'
'*****'
'manelmanel'
'manel'

Dissenya la funció següent i desa-la al mòdul codificacio (fitxer codificacio.py):

codificacio.codifica_tuples_paraules(it)
Paràmetres:

it – iterador sobre una sèrie P de parells (string, list)

Retorna:

iterador sobre la codificació de tots els elements d”it

Es recomana utiltzar la funció isinstance() per comprovar el tipus d’un objecte.

Per exemple,


>>> it = iter([('hola',[2,1,-1]),('manel', [3,'hi',-2, 2,1])])
>>> it2 = codifica_tuples_paraules(it)
>>> next(it2)
'holahola'
>>> next(it2)
'hola'
>>> for p in it2:
...    print(p,end=',')
****,manelmanelmanel,*****,*****,manelmanel,manel,


Disposes d’un joc de proves més complet al fitxer tests-codifica.txt.