3. Iterador amb rectangles (2 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.
Dissenya la funció següent, que pots implementar com un generador o bé fent servir les funcions predefinides i els mòduls de Python que treballen amb iteradors, i desa-la al mòdul itrect
(fitxer itrect.py):
- itrect.interseccions(it)¶
- Paràmetres:
it – iterador sobre una seqüència no buida de rectangles \(R_0, \, R_1, \, R_2, \, R_3, \, \dots\) (instàncies de la classe
Rectangle)- Retorna:
iterador sobre una seqüència S d’enters \(A_1, \, A_2, \, \dots\), on cada valor \(A_i\) és l’àrea de la intersecció dels rectangles \(R_{i-1}\) i \(R_i\), sempre que aquesta intersecció no sigui buida (és a dir, la seqüència S només ha d’incloure valors estrictament positius).
Per exemple,
>>> from itrect import interseccions >>> from rectangles import Rectangle >>> r0 = Rectangle(10, 20, 130, 140, 'roig') >>> r1 = Rectangle(0, 10, 170, 80, 'blau') >>> r2 = Rectangle(0, 25, 120, 180, 'taronja') >>> r3 = Rectangle(40, 40, 200, 200, 'verd') >>> r4 = Rectangle(50, 80, 100, 70, 'lila') >>> it = iter([r0, r1, r2, r3, r4]) >>> for x in interseccions(it): ... print(x) # Només intersecten r0 amb r1, r1 amb r2 i r2 amb r3 7200 6600 11200 >>> next(it, 'FINAL') 'FINAL'
Suggeriment
Fixeu-vos bé en l’especificació de la classe Rectangle, ja que disposa de mètodes i operacions que us ajudaran a implementar aquesta funció.
Disposeu d’un joc de proves al fitxer tests-itrect.txt.