1. Seqüències d’enters (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.
En aquest exercici treballarem un iterador que lliura enters que estan organitzats com a subseqüencies de xifres (enters entre 0 i 9) i que acaben en -1. És a dir, totes les xifres lliurades abans d’arribar al valor -1 formen una subseqüència de xifres. Per exemple, un iterador que lliuri la següent seqüència o seguit d’enters:
6 3 -1 1 2 3 4 5 -1 -1
té tres subseqüències de xifres. La darrera és buida, i les dues primeres són:
6 3
1 2 3 4 5
La funció que demanem a continuació agafarà com a paràmetre un iterador com el que hem descrit, i tornarà un generador que lliurarà un enter per cada subseqüència de xifres donada pel paràmetre iterador. En l’exemple anterior de les tres subseqüències, el generador resultant lliurarà els tres enters:
63 12345 0
L’enter 63 s’ha determinat fent:
n=0 abans de començar l'obtenció de xifres,
n=6 aplicant 10*n+6 quan obtenim 6,
n=63 aplicant 10*n+3 quan obtenim 3,
podem dir que el nombre calculat és 63 (darrer valor de n) quan obtenim -1.
Es demana que, en un fitxer anomenat seqint.py, hi deseu la funció generadora especificada a continuació:
- seqint.seqint(it)¶
- Paràmetres:
it – iterador sobre una seqüència d’enters organitzada com a subseqüències
de xifres (
) finalitzades cadascuna amb l’enter -1 (
). Com a mínim la seqüència té l’enter -1
- Retorna:
iterador que genera un enter
per cada subseqüència
de xifres d”it. Si la subsequència
està formada per la seqüència de xifres
acabada amb
, el valor de l’enter
s’obté aplicant el següent càlcul sobre les xifres
de la subseqüència
:
Per exemple:
Cas mínim (subseqüència buida o sense xifres):
>>> for n in seqint(iter([-1])):
... print(repr(n), end='-')
0-
Una subseqüència amb les xifres 1 i 3:
>>> for n in seqint(iter([ 1, 3, -1 ])):
... print(repr(n), end='-')
13-
Tres subseqüències:
>>> for n in seqint(iter([ 1, 2, 3, -1, 9, 8, -1, -1])):
... print(repr(n), end='-')
123-98-0-
Disposeu d’un joc de proves més complet en el fitxer tests-seqint.txt