3. Selecció d’imatges (3 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 no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements dels iteradors.

La classe Imatge, especificada a continuació, està implementada al fitxer imatges.py (que heu de descarregar). Representa una imatge digital amb una amplada, una altura i un color de fons:

class Imatge(amplada, altura, cfons)

Crea una instància de la classe que representa una imatge amb una amplada (int), altura (int) i un color de fons, cfons (str).

Atributs:

amplada

Amplada de la imatge (int)

altura

Altura de la imatge (int)

cfons

Color de fons de la imatge (str)

Mètodes:

area()

Retorna l’àrea de la imatge (int)

Es disposa d’un iterador d’imatges (instàncies de la classe imatge.Imatge) del que volem seleccionar les imatges que tenen una àrea inferior a una àrea llindar donada. A partir d’aquest iterador, volem obtenir un iterador de tuples de dos elements: el primer és el color de la imatge i el segon és la seva àrea.

En un fitxer anomenat sel_imatges.py deseu la funció especificada a continuació:

sel_imatges.sel_imatges(it, allindar)
Paràmetres:
  • it – un iterador sobre una seqüencia d’imatges (instàncies de la classe imatges.Imatge)

  • allindar – una àrea llindar (int)

Retorna:

un iterador sobre una seqüència de tuples (color, àrea) corresponents a les imatges de it tals que la seva àrea sigui inferior a allindar. Els valors color (str) i àrea (int) es refereixen al color de fons i àrea de la imatge, respectivament.

Exemple:

>>> im1 = Imatge(400, 350, 'BLANC')
>>> im2 = Imatge(400, 250, 'NEGRE')
>>> im3 = Imatge(550, 450, 'BLAU')
>>> im4 = Imatge(300, 300, 'VERD')
>>> it = iter([im1, im2, im3, im4])

>>> it1 = sel_imatges(it, 150000)
>>> iter(it) == it
True
>>> next(it1)
('BLANC', 140000)
>>> next(it1)
('NEGRE', 100000)
>>> for im in it1:
...    print(im)
('VERD', 90000)

Disposeu de més proves al fitxer test-sel_imatges.txt