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:
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