Classe Quadrat¶
En el fitxer
quadrat.py, dissenyeu la classeQuadratque permet de representar quadrats.- class quadrat.Quadrat(v, m)¶
Retorna un nou quadrat tal que el vèrtex de coordenades x i y mínimes és v (
Punt2D) i la longitud de l’aresta és m.Atributs:
- mida¶
Longitud de l’aresta del quadrat.
Mètodes:
- té_dins(p)¶
Retorna True si el punt p és dins del quadrat i False en cas contrari.
També suporta la funció
str.
Per exemple:
>>> from punt2D import Punt2D >>> from quadrat import Quadrat >>> p = Punt2D(3, 4) >>> q = Quadrat(p, 5) >>> str(q) 'Quadrat(Punt2D(3, 4), 5)' >>> p1 = Punt2D(0, 0) >>> q = Quadrat(p1, 10) >>> p2 = Punt2D(5, 5) >>> q.té_dins(p2) True >>> p3 = Punt2D(-1, -1) >>> q.té_dins(p3) False
Observeu que cal implementar, a més del mètode
té_dins(), els mètodes__init__i__str__. El mètode__init__assigna el valor v a l’atributvèrtexi el valor m a l’atributmida. El mètode__str__retorna un string en format “Quadrat(Punt2D(x, y), mida)”.Disposeu d’aquest joc de proves al fitxer
quadrat.txt.En el shell de python, creeu una instància de la classe
Quadrat. Consulteu i modifiqueu els seus atributs. Feu-ne un print. Creeu una instància de la classePunt2Di comproveu si és dins del quadrat. Proveu de fer el següent experiment:>>> from punt2D import Punt2D >>> from quadrat import Quadrat >>> q1 = Quadrat(Punt2D(0, 0), 1) >>> q2 = q1 >>> q1.mida = 4
Quin és el valor de q2? Proveu ara:
>>> q1 = Quadrat(Punt2D(1, 1), 2) >>> q2 = Quadrat(Punt2D(0, 0), 1) >>> q2.mida = q1.mida >>> q2.vèrtex = q1.vèrtex >>> q1.mida = 7 >>> q1.vèrtex.x = 66
Quin és el valor de q2? Per què? Implementeu el mètode
copy()que retorna una còpia del quadrat. Cal que utilitzeu la funció:deepcopy()del mòdulcopy.
Disposeu d’aquest joc de proves al fitxer quadrat.txt.
Solució
Disposeu d’una solució al fitxer quadrat.py.
Funció selec_quadrats¶
En el fitxer
selec_quadrats.py, dissenyeu la funcióselec_quadrats()especificada com:
- selec_quadrats.selec_quadrats(itq, area, punt)¶
- Paràmetres:
itq – un iterador sobre una sequència de quadrats (
quadrat.Quadrat)area – el valor d’una àrea (
float)punt – una instància a la classe
punt2D.Punt2D
- Retorna:
un iterador sobre una seqüència d’strings corresponents als vèrtexs inferior esquerra d’aquells quadrats que tenen una àrea més gran que la donada i que contenen el punt donat, convertits a string.
Exemple:
>>> lq = [(-4, 8, 10), (9, 2, 10), (1, 4, 2), (5, -2, 16), (-27, -5, 2), (-6, 4, 9), (1, 6, 20), (-3, 4, 18), (3, 4, 8), (6, 1, 12), (67, 12, 3)] >>> itq = map(lambda x: Quadrat(Punt2D(x[0], x[1]), x[2]), lq) >>> it1, it2, it3 = itertools.tee(itq, 3) >>> it1 = selec_quadrats(it1, 25, Punt2D(14, 7)) >>> iter(it1) == it1 True >>> list(it1) ['Punt2D(9, 2)', 'Punt2D(5, -2)', 'Punt2D(1, 6)', 'Punt2D(-3, 4)', 'Punt2D(6, 1)'] >>> it2 = selec_quadrats(it2, 100, Punt2D(14, 12)) >>> list(it2) ['Punt2D(5, -2)', 'Punt2D(1, 6)', 'Punt2D(-3, 4)', 'Punt2D(6, 1)'] >>> it3 = selec_quadrats(it3, 25, Punt2D(20, 20)) >>> list(it3) ['Punt2D(1, 6)']
Avís
En el disseny de la funció selec_quadrats() no es
poden fer servir llistes, tuples, diccionaris ni cap
altra estructura de dades per a desar els elements d’un
iterador.
Per a resoldre aquest exercici cal que us descarregueu els fitxers amb
les implementacions de les classes Quadrat i
Punt2D: fitxers quadrat.py i punt2D.py.
Disposeu de més tests al fitxer test-selec_quadrats.txt i d’una solució selec_quadrats.py
Classe QuadratDibuix¶
En el fitxer
quadratdibuix.py, dissenyeu la classeQuadratDibuixque es deriva, per herència, de la classeQuadrat.- class quadratdibuix.QuadratDibuix(vrt, md, col, p)¶
Retorna un nou QuadratDibuix tal que el vèrtex de coordenades x i y mínimes és vrt (
Punt2D), la longitud de l’aresta és md, el color col i p (bool) indica si el quadrat s’ha d’omplir de color.Atributs:
- color¶
Tupla (R, G, B) que codifica el color del quadrat.
- ple¶
Booleà que indica si el quadrat s’ha d’omplir de color.
Mètodes:
- color_vàlid()¶
Retorna
Truesi cadascun dels tres components estan compresos entre 0 i 255 iFalsealtrament.
En el shell de python, creeu una instància de la classe
QuadratDibuix. Consulteu i modifiqueu els seus atributs. Comproveu que el mètodeté_dins()de la classe pareQuadrats’ha heretat i per tant també hi és aplicable. Comproveu el mètodecolor_vàlid(). Creeu una instància a la classeQuadrati comproveu què passa si intenteu cridar el mètodecolor_vàlid().Disposeu d’aquest joc de proves al fitxer
quadratdibuix.txt.
Solució
Disposeu d’una solució al fitxer quadratdibuix.py.