Solució de l’examen de reavaluació

Organització:

Secció ETSEIB, Departament de Ciències de la Computació, UPC

Data:

1 de juliol de 2025

Copyright:

Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons

Jocs de proves

Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG=


>>> from rectangles import Rectangle

Tests posrel

>>> from posicio import posrel
>>> r1 = Rectangle(10, 20, 40, 60, 'blau') ## ++ / ++
>>> for x in (5, 30, 200):  # doctesttag: +TAG=1_posrel
...    for y in (10, 20, 70):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r1)} del rectangle")
El punt (5,10) és a la zona SO del rectangle
El punt (5,20) és a la zona O del rectangle
El punt (5,70) és a la zona NO del rectangle
El punt (30,10) és a la zona S del rectangle
El punt (30,20) és a la zona X del rectangle
El punt (30,70) és a la zona N del rectangle
El punt (200,10) és a la zona SE del rectangle
El punt (200,20) és a la zona E del rectangle
El punt (200,70) és a la zona NE del rectangle
>>> r3 = Rectangle(-40, 20, -10, 60, 'blau') ## -+ / -+
>>> for x in (-50, -10, 200):  # doctesttag: +TAG=1_posrel
...    for y in (10, 20, 70):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r3)} del rectangle")
El punt (-50,10) és a la zona SO del rectangle
El punt (-50,20) és a la zona O del rectangle
El punt (-50,70) és a la zona NO del rectangle
El punt (-10,10) és a la zona S del rectangle
El punt (-10,20) és a la zona X del rectangle
El punt (-10,70) és a la zona N del rectangle
El punt (200,10) és a la zona SE del rectangle
El punt (200,20) és a la zona E del rectangle
El punt (200,70) és a la zona NE del rectangle
>>> r8 = Rectangle(-40, -20, -10, 20, 'blau') ## -- / -+
>>> for x in (-50, -25, -5):  # doctesttag: +TAG=1_posrel
...    for y in (-25, 0, 25):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r8)} del rectangle")
El punt (-50,-25) és a la zona SO del rectangle
El punt (-50,0) és a la zona O del rectangle
El punt (-50,25) és a la zona NO del rectangle
El punt (-25,-25) és a la zona S del rectangle
El punt (-25,0) és a la zona X del rectangle
El punt (-25,25) és a la zona N del rectangle
El punt (-5,-25) és a la zona SE del rectangle
El punt (-5,0) és a la zona E del rectangle
El punt (-5,25) és a la zona NE del rectangle
>>> r9 = Rectangle(-10, -20, 20, 20, 'blau') ## -- / ++

### Limit cases (only 1st quadrant placement)

>>> r10 = Rectangle(20, 20, 20, 20, 'blau') ### point
>>> for x in (19, 20, 21):  # doctesttag: +TAG=1_posrel
...    for y in (19, 20, 21):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r10)} del rectangle")
El punt (19,19) és a la zona SO del rectangle
El punt (19,20) és a la zona O del rectangle
El punt (19,21) és a la zona NO del rectangle
El punt (20,19) és a la zona S del rectangle
El punt (20,20) és a la zona X del rectangle
El punt (20,21) és a la zona N del rectangle
El punt (21,19) és a la zona SE del rectangle
El punt (21,20) és a la zona E del rectangle
El punt (21,21) és a la zona NE del rectangle
>>> r11 = Rectangle(20, 20, 20, 60, 'blau') ### vertical line
>>> for x in (19, 20, 21):  # doctesttag: +TAG=1_posrel
...    for y in (10, 30, 65):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r11)} del rectangle")
El punt (19,10) és a la zona SO del rectangle
El punt (19,30) és a la zona O del rectangle
El punt (19,65) és a la zona NO del rectangle
El punt (20,10) és a la zona S del rectangle
El punt (20,30) és a la zona X del rectangle
El punt (20,65) és a la zona N del rectangle
El punt (21,10) és a la zona SE del rectangle
El punt (21,30) és a la zona E del rectangle
El punt (21,65) és a la zona NE del rectangle
>>> r12 = Rectangle(10, 20, 40, 20, 'blau') ### horizontal line
>>> for x in (5, 10, 41):  # doctesttag: +TAG=1_posrel
...    for y in (19, 20, 21):
...        print(f"El punt ({x},{y}) és a la zona {posrel(x, y, r12)} del rectangle")
El punt (5,19) és a la zona SO del rectangle
El punt (5,20) és a la zona O del rectangle
El punt (5,21) és a la zona NO del rectangle
El punt (10,19) és a la zona S del rectangle
El punt (10,20) és a la zona X del rectangle
El punt (10,21) és a la zona N del rectangle
El punt (41,19) és a la zona SE del rectangle
El punt (41,20) és a la zona E del rectangle
El punt (41,21) és a la zona NE del rectangle

Tests classe Dibuix

>>> from dibuixos import Dibuix
>>> escena = Dibuix('Modest Urgell')
>>> escena.autor    # doctesttag: +TAG=2_dibuix
'Modest Urgell'
>>> escena.rects == [] # doctesttag: +TAG=2_dibuix
True
>>> print(escena.límits())  # doctesttag: +TAG=2_dibuix
Rectangle de color negre entre els punts (0, 0) i (0, 0)
>>> escena.afegir(Rectangle(37, 2, 48, 9, 'marró'))
>>> escena.afegir(Rectangle(40, 44, 44, 49, 'magenta'))
>>> escena.afegir(Rectangle(33, 14, 39, 17, 'taronja'))
>>> print(escena[2])  # doctesttag: +TAG=2_dibuix
Rectangle de color taronja entre els punts (33, 14) i (39, 17)
>>> escena.afegir(Rectangle(80, 67, 100, 80, 'daurat'))
>>> escena.afegir(Rectangle(11, 30, 46, 59, 'gris'))
>>> escena.afegir(Rectangle(50, 55, 63, 69, 'daurat'))
>>> escena.afegir(Rectangle(4, 20, 14, 27, 'plata'))
>>> escena.autor    # doctesttag: +TAG=2_dibuix
'Modest Urgell'
>>> len(escena)    # doctesttag: +TAG=2_dibuix
7
>>> print(escena[6])  # doctesttag: +TAG=2_dibuix
Rectangle de color plata entre els punts (4, 20) i (14, 27)
>>> for rect in escena.rects:  # doctesttag: +TAG=2_dibuix
...   print(rect)
Rectangle de color marró entre els punts (37, 2) i (48, 9)
Rectangle de color magenta entre els punts (40, 44) i (44, 49)
Rectangle de color taronja entre els punts (33, 14) i (39, 17)
Rectangle de color daurat entre els punts (80, 67) i (100, 80)
Rectangle de color gris entre els punts (11, 30) i (46, 59)
Rectangle de color daurat entre els punts (50, 55) i (63, 69)
Rectangle de color plata entre els punts (4, 20) i (14, 27)
>>> escena.afegir(Rectangle(50, 51, 63, 50, 'groc'), False)
>>> print(escena[0])  # doctesttag: +TAG=2_dibuix
Rectangle de color groc entre els punts (50, 51) i (63, 50)
>>> print(escena.límits())  # doctesttag: +TAG=2_dibuix
Rectangle de color blanc entre els punts (4, 2) i (100, 80)
>>> escena.color(10, 71)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena.color(36, 71)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena.color(12, 69)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena = Dibuix('Marià Fortuny')
>>> print(escena.límits())  # doctesttag: +TAG=2_dibuix
Rectangle de color negre entre els punts (0, 0) i (0, 0)
>>> escena.afegir(Rectangle(47, 20, 55, 32, 'beix'))
>>> escena.afegir(Rectangle(22, 9, 38, 18, 'rosa'), False)
>>> escena.afegir(Rectangle(26, 50, 32, 54, 'turquesa'))
>>> escena.afegir(Rectangle(33, 27, 50, 48, 'magenta'))
>>> escena.afegir(Rectangle(35, 14, 46, 25, 'daurat'), False)
>>> escena.afegir(Rectangle(56, 40, 64, 47, 'cian'))
>>> escena.autor  # doctesttag: +TAG=2_dibuix
'Marià Fortuny'
>>> len(escena)  # doctesttag: +TAG=2_dibuix
6
>>> print(escena[-1])  # doctesttag: +TAG=2_dibuix
Rectangle de color cian entre els punts (56, 40) i (64, 47)
>>> for rect in escena.rects:  # doctesttag: +TAG=2_dibuix
...   print(rect)
Rectangle de color daurat entre els punts (35, 14) i (46, 25)
Rectangle de color rosa entre els punts (22, 9) i (38, 18)
Rectangle de color beix entre els punts (47, 20) i (55, 32)
Rectangle de color turquesa entre els punts (26, 50) i (32, 54)
Rectangle de color magenta entre els punts (33, 27) i (50, 48)
Rectangle de color cian entre els punts (56, 40) i (64, 47)
>>> print(escena.límits())  # doctesttag: +TAG=2_dibuix
Rectangle de color blanc entre els punts (22, 9) i (64, 54)
>>> escena.color(56, 19)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena.color(41, 39)  # doctesttag: +TAG=2_dibuix
'magenta'
>>> escena.color(48, 14)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena = Dibuix('Josep Guinovart')
>>> escena.límits().color == 'negre'  # doctesttag: +TAG=2_dibuix
True
>>> escena.afegir(Rectangle(47, 38, 65, 1047, 'daurat'))
>>> escena.afegir(Rectangle(42, 7, 54, 16, 'taronja'))
>>> escena.afegir(Rectangle(33, 19, 66, 41, 'negre'))
>>> escena.afegir(Rectangle(0, 42, 9, 52, 'bordó'))
>>> escena.afegir(Rectangle(58, 1058, 72, 79, 'rosa'))
>>> escena.afegir(Rectangle(-50, 51, 52, 53, 'daurat'))
>>> escena.afegir(Rectangle(58, 30, 64, 41, 'negre'), False)
>>> escena.afegir(Rectangle(4, 47, 12, 51, 'gris'))
>>> escena.afegir(Rectangle(29, 75, 46, 100, 'turquesa'), False)
>>> escena.autor  # doctesttag: +TAG=2_dibuix
'Josep Guinovart'
>>> len(escena)  # doctesttag: +TAG=2_dibuix
9
>>> print(escena[-1])  # doctesttag: +TAG=2_dibuix
Rectangle de color gris entre els punts (4, 47) i (12, 51)
>>> for rect in escena:  # doctesttag: +TAG=2_dibuix
...   print(rect)
Rectangle de color turquesa entre els punts (29, 75) i (46, 100)
Rectangle de color negre entre els punts (58, 30) i (64, 41)
Rectangle de color daurat entre els punts (47, 38) i (65, 1047)
Rectangle de color taronja entre els punts (42, 7) i (54, 16)
Rectangle de color negre entre els punts (33, 19) i (66, 41)
Rectangle de color bordó entre els punts (0, 42) i (9, 52)
Rectangle de color rosa entre els punts (58, 1058) i (72, 79)
Rectangle de color daurat entre els punts (-50, 51) i (52, 53)
Rectangle de color gris entre els punts (4, 47) i (12, 51)
>>> print(escena.límits())  # doctesttag: +TAG=2_dibuix
Rectangle de color blanc entre els punts (-50, 7) i (72, 1047)
>>> escena.color(67, 55)  # doctesttag: +TAG=2_dibuix
'blanc'
>>> escena.color(40, 11)  # doctesttag: +TAG=2_dibuix
'blanc'

Test interseccions

>>> from itrect import interseccions
>>> r1 = Rectangle(7, 17, 20, 18, 'vermell')
>>> r2 = Rectangle(5, 17, 10, 20, 'vermell')
>>> for x in interseccions(iter([r1])): # doctesttag: +TAG=3_interseccions
...     print(x)
>>> for x in interseccions(iter([r1,r2])): # doctesttag: +TAG=3_interseccions
...     print(x)
3
>>> for x in interseccions(iter([r1,r2,r2,r1])): # doctesttag: +TAG=3_interseccions
...     print(x, end=',')
3,15,3,
>>> lr = []
>>> r = Rectangle(7, 17, 20, 18, 'vermell')
>>> lr.append(r)
>>> r = Rectangle(10, 8, 20, 13, 'marró')
>>> lr.append(r)
>>> r = Rectangle(14, 10, 15, 19, 'turquesa')
>>> lr.append(r)
>>> r = Rectangle(3, 1, 11, 3, 'lila')
>>> lr.append(r)
>>> r = Rectangle(1, 1, 14, 12, 'lila')
>>> lr.append(r)
>>> r = Rectangle(0, 12, 5, 15, 'lila')
>>> lr.append(r)
>>> r = Rectangle(16, 13, 17, 20, 'lila')
>>> lr.append(r)
>>> r = Rectangle(19, 5, 20, 16, 'daurat')
>>> lr.append(r)
>>> r = Rectangle(3, 11, 10, 13, 'blau')
>>> lr.append(r)
>>> r = Rectangle(14, 0, 19, 19, 'rosa')
>>> lr.append(r)
>>> r = Rectangle(3, 7, 15, 20, 'turquesa')
>>> lr.append(r)
>>> r = Rectangle(5, 2, 9, 18, 'magenta')
>>> lr.append(r)
>>> r = Rectangle(6, 14, 10, 20, 'cian')
>>> lr.append(r)
>>> it = iter(lr)
>>> for x in interseccions(it): # doctesttag: +TAG=3_interseccions
...     print(x)
3
16
12
44
12
>>> lr = []
>>> r = Rectangle(6, 18, 12, 19, 'gris')
>>> lr.append(r)
>>> r = Rectangle(12, 19, 20, 20, 'beix')
>>> lr.append(r)
>>> r = Rectangle(9, 18, 10, 20, 'blanc')
>>> lr.append(r)
>>> r = Rectangle(15, 6, 16, 14, 'blau')
>>> lr.append(r)
>>> r = Rectangle(6, 18, 18, 19, 'beix')
>>> lr.append(r)
>>> r = Rectangle(17, 3, 20, 19, 'daurat')
>>> lr.append(r)
>>> r = Rectangle(11, 11, 13, 19, 'groc')
>>> lr.append(r)
>>> r = Rectangle(16, 15, 18, 18, 'vermell')
>>> lr.append(r)
>>> r = Rectangle(17, 16, 18, 19, 'turquesa')
>>> lr.append(r)
>>> r = Rectangle(6, 12, 16, 13, 'marró')
>>> lr.append(r)
>>> it = iter(lr)
>>> for x in interseccions(it): # doctesttag: +TAG=3_interseccions
...     print(x)
1
2
>>> lr = []
>>> r = Rectangle(15, 17, 19, 20, 'taronja')
>>> lr.append(r)
>>> r = Rectangle(12, 13, 19, 20, 'negre')
>>> lr.append(r)
>>> r = Rectangle(0, 5, 4, 18, 'turquesa')
>>> lr.append(r)
>>> r = Rectangle(9, 1, 10, 20, 'taronja')
>>> lr.append(r)
>>> r = Rectangle(4, 11, 12, 16, 'oliva')
>>> lr.append(r)
>>> it = iter(lr)
>>> for x in interseccions(it): # doctesttag: +TAG=3_interseccions
...     print(x)
12
5
>>> lr = []
>>> r = Rectangle(12, 2, 13, 12, 'taronja')
>>> lr.append(r)
>>> r = Rectangle(12, 16, 16, 18, 'cian')
>>> lr.append(r)
>>> r = Rectangle(6, 16, 15, 20, 'groc')
>>> lr.append(r)
>>> r = Rectangle(5, 11, 12, 19, 'rosa')
>>> lr.append(r)
>>> r = Rectangle(11, 0, 17, 19, 'maragda')
>>> lr.append(r)
>>> r = Rectangle(19, 11, 20, 13, 'daurat')
>>> lr.append(r)
>>> r = Rectangle(4, 12, 7, 20, 'taronja')
>>> lr.append(r)
>>> r = Rectangle(7, 10, 8, 20, 'magenta')
>>> lr.append(r)
>>> r = Rectangle(12, 17, 17, 18, 'beix')
>>> lr.append(r)
>>> r = Rectangle(4, 1, 9, 18, 'negre')
>>> lr.append(r)
>>> r = Rectangle(6, 2, 12, 16, 'blau')
>>> lr.append(r)
>>> r = Rectangle(16, 13, 20, 16, 'vermell')
>>> lr.append(r)
>>> r = Rectangle(12, 8, 13, 13, 'verd')
>>> lr.append(r)
>>> r = Rectangle(8, 3, 17, 9, 'negre')
>>> lr.append(r)
>>> it = iter(lr)
>>> for x in interseccions(it): # doctesttag: +TAG=3_interseccions
...     print(x)
6
18
8
42
1
>>> lr = []
>>> r = Rectangle(2, 5, 8, 13, 'cian')
>>> lr.append(r)
>>> r = Rectangle(16, 18, 18, 19, 'cian')
>>> lr.append(r)
>>> r = Rectangle(1, 12, 6, 16, 'negre')
>>> lr.append(r)
>>> r = Rectangle(2, 3, 8, 5, 'bordó')
>>> lr.append(r)
>>> r = Rectangle(3, 1, 12, 7, 'lila')
>>> lr.append(r)
>>> r = Rectangle(16, 19, 19, 20, 'plata')
>>> lr.append(r)
>>> r = Rectangle(1, 0, 20, 6, 'beix')
>>> lr.append(r)
>>> r = Rectangle(11, 16, 16, 18, 'blau')
>>> lr.append(r)
>>> r = Rectangle(5, 3, 8, 19, 'beix')
>>> lr.append(r)
>>> it = iter(lr)
>>> for x in interseccions(it): # doctesttag: +TAG=3_interseccions
...     print(x)
10
>>> r = Rectangle(5, 3, 8, 19, 'beix')
>>> for x in interseccions((r for _ in range(10))): # doctesttag: +TAG=3_interseccions
...     print(x, end=',')
48,48,48,48,48,48,48,48,48,
>>> for x in interseccions((r1 for _ in range(20))): # doctesttag: +TAG=3_interseccions
...     print(x, end=',')
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,

Tests crea_graf_rects

>>> from crea import crea_graf_rects
>>> lr = []
>>> r = Rectangle(6, 38, 89, 96, 'blau')
>>> lr.append(r)
>>> r = Rectangle(41, 3, 54, 35, 'magenta')
>>> lr.append(r)
>>> r = Rectangle(71, 6, 93, 99, 'verd')
>>> lr.append(r)
>>> r = Rectangle(1, 41, 66, 58, 'blanc')
>>> lr.append(r)
>>> r = Rectangle(10, 16, 99, 74, 'cian')
>>> lr.append(r)
>>> r = Rectangle(87, 96, 90, 97, 'daurat')
>>> lr.append(r)
>>> g = crea_graf_rects(lr[:3])
>>> set(g.nodes()) == set(lr[:3]) and g.number_of_edges() == 1 # doctesttag: +TAG=4_crea_graf_rects
True
>>> for x in sorted(sorted([str(a), str(b)]) + [c] for a, b, c in g.edges(data=True)):
...     print(x) # doctesttag: +TAG=4_crea_graf_rects
['Rectangle de color blau entre els punts (6, 38) i (89, 96)', 'Rectangle de color verd entre els punts (71, 6) i (93, 99)', {'àrea': 1044}]
>>> g = crea_graf_rects(lr)
>>> set(g.nodes()) == set(lr) and g.number_of_edges() == 7 # doctesttag: +TAG=4_crea_graf_rects
True
>>> for x in sorted(sorted([str(a), str(b)]) + [c] for a, b, c in g.edges(data=True)):
...     print(x) # doctesttag: +TAG=4_crea_graf_rects
['Rectangle de color blanc entre els punts (1, 41) i (66, 58)', 'Rectangle de color blau entre els punts (6, 38) i (89, 96)', {'àrea': 1020}]
['Rectangle de color blanc entre els punts (1, 41) i (66, 58)', 'Rectangle de color cian entre els punts (10, 16) i (99, 74)', {'àrea': 952}]
['Rectangle de color blau entre els punts (6, 38) i (89, 96)', 'Rectangle de color cian entre els punts (10, 16) i (99, 74)', {'àrea': 2844}]
['Rectangle de color blau entre els punts (6, 38) i (89, 96)', 'Rectangle de color verd entre els punts (71, 6) i (93, 99)', {'àrea': 1044}]
['Rectangle de color cian entre els punts (10, 16) i (99, 74)', 'Rectangle de color magenta entre els punts (41, 3) i (54, 35)', {'àrea': 247}]
['Rectangle de color cian entre els punts (10, 16) i (99, 74)', 'Rectangle de color verd entre els punts (71, 6) i (93, 99)', {'àrea': 1276}]
['Rectangle de color daurat entre els punts (87, 96) i (90, 97)', 'Rectangle de color verd entre els punts (71, 6) i (93, 99)', {'àrea': 3}]
>>> lr = []
>>> r = Rectangle(75, 51, 97, 96, 'vermell')
>>> lr.append(r)
>>> r = Rectangle(80, 53, 91, 55, 'oliva')
>>> lr.append(r)
>>> r = Rectangle(50, 58, 58, 75, 'taronja')
>>> lr.append(r)
>>> r = Rectangle(86, 54, 95, 95, 'verd')
>>> lr.append(r)
>>> r = Rectangle(60, 15, 63, 80, 'magenta')
>>> lr.append(r)
>>> r = Rectangle(34, 9, 66, 80, 'groc')
>>> lr.append(r)
>>> r = Rectangle(1, 26, 80, 75, 'verd')
>>> lr.append(r)
>>> r = Rectangle(70, 47, 71, 60, 'negre')
>>> lr.append(r)
>>> r = Rectangle(97, 74, 99, 75, 'plata')
>>> lr.append(r)
>>> g = crea_graf_rects(lr)
>>> set(g.nodes()) == set(lr) and g.number_of_edges() == 10 # doctesttag: +TAG=4_crea_graf_rects
True
>>> for x in sorted(sorted([str(a), str(b)]) + [c] for a, b, c in g.edges(data=True)):
...     print(x) # doctesttag: +TAG=4_crea_graf_rects
['Rectangle de color groc entre els punts (34, 9) i (66, 80)', 'Rectangle de color magenta entre els punts (60, 15) i (63, 80)', {'àrea': 195}]
['Rectangle de color groc entre els punts (34, 9) i (66, 80)', 'Rectangle de color taronja entre els punts (50, 58) i (58, 75)', {'àrea': 136}]
['Rectangle de color groc entre els punts (34, 9) i (66, 80)', 'Rectangle de color verd entre els punts (1, 26) i (80, 75)', {'àrea': 1568}]
['Rectangle de color magenta entre els punts (60, 15) i (63, 80)', 'Rectangle de color verd entre els punts (1, 26) i (80, 75)', {'àrea': 147}]
['Rectangle de color negre entre els punts (70, 47) i (71, 60)', 'Rectangle de color verd entre els punts (1, 26) i (80, 75)', {'àrea': 13}]
['Rectangle de color oliva entre els punts (80, 53) i (91, 55)', 'Rectangle de color verd entre els punts (86, 54) i (95, 95)', {'àrea': 5}]
['Rectangle de color oliva entre els punts (80, 53) i (91, 55)', 'Rectangle de color vermell entre els punts (75, 51) i (97, 96)', {'àrea': 22}]
['Rectangle de color taronja entre els punts (50, 58) i (58, 75)', 'Rectangle de color verd entre els punts (1, 26) i (80, 75)', {'àrea': 136}]
['Rectangle de color verd entre els punts (1, 26) i (80, 75)', 'Rectangle de color vermell entre els punts (75, 51) i (97, 96)', {'àrea': 120}]
['Rectangle de color verd entre els punts (86, 54) i (95, 95)', 'Rectangle de color vermell entre els punts (75, 51) i (97, 96)', {'àrea': 369}]
>>> g = crea_graf_rects(lr[:6])
>>> set(g.nodes()) == set(lr[:6]) # doctesttag: +TAG=4_crea_graf_rects
True
>>> for x in sorted((sorted([str(a), str(b)]) + [c] for a, b, c in g.edges(data=True))):
...     print(x) # doctesttag: +TAG=4_crea_graf_rects
['Rectangle de color groc entre els punts (34, 9) i (66, 80)', 'Rectangle de color magenta entre els punts (60, 15) i (63, 80)', {'àrea': 195}]
['Rectangle de color groc entre els punts (34, 9) i (66, 80)', 'Rectangle de color taronja entre els punts (50, 58) i (58, 75)', {'àrea': 136}]
['Rectangle de color oliva entre els punts (80, 53) i (91, 55)', 'Rectangle de color verd entre els punts (86, 54) i (95, 95)', {'àrea': 5}]
['Rectangle de color oliva entre els punts (80, 53) i (91, 55)', 'Rectangle de color vermell entre els punts (75, 51) i (97, 96)', {'àrea': 22}]
['Rectangle de color verd entre els punts (86, 54) i (95, 95)', 'Rectangle de color vermell entre els punts (75, 51) i (97, 96)', {'àrea': 369}]
>>> lr = []
>>> r = Rectangle(37, 80, 54, 82, 'blau')
>>> lr.append(r)
>>> r = Rectangle(81, 93, 99, 99, 'cian')
>>> lr.append(r)
>>> r = Rectangle(45, 4, 49, 38, 'rosa')
>>> lr.append(r)
>>> r = Rectangle(69, 93, 94, 95, 'daurat')
>>> lr.append(r)
>>> r = Rectangle(58, 20, 63, 46, 'plata')
>>> lr.append(r)
>>> r = Rectangle(68, 5, 91, 39, 'blanc')
>>> lr.append(r)
>>> r = Rectangle(15, 46, 62, 95, 'marró')
>>> lr.append(r)
>>> r = Rectangle(72, 40, 82, 50, 'magenta')
>>> lr.append(r)
>>> g = crea_graf_rects(lr)
>>> set(g.nodes()) == set(lr) and g.number_of_edges() == 2 # doctesttag: +TAG=4_crea_graf_rects
True
>>> for x in sorted(sorted([str(a), str(b)]) + [c] for a, b, c in g.edges(data=True)):
...     print(x) # doctesttag: +TAG=4_crea_graf_rects
['Rectangle de color blau entre els punts (37, 80) i (54, 82)', 'Rectangle de color marró entre els punts (15, 46) i (62, 95)', {'àrea': 34}]
['Rectangle de color cian entre els punts (81, 93) i (99, 99)', 'Rectangle de color daurat entre els punts (69, 93) i (94, 95)', {'àrea': 26}]

Tests preu_mitja

>>> import pandas as pd
>>> from preum import preu_mitja
>>> df = pd.read_csv('pantalons2.csv', parse_dates=['Data'])
>>> p = preu_mitja(df, 'M', 'home', 'Shanghai Yangji Car Accessories Co. Ltd.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
20.90
>>> p = preu_mitja(df, 'XS', 'unisex', 'TEXTILANDIA INTERNACIONAL')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
17.96
>>> p = preu_mitja(df, 'S', 'dona', 'POPPYS KNITWEAR PRIVATE')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
24.76
>>> p = preu_mitja(df, 'L', 'home', 'Shanghai Yangji Car Accessories Co. Ltd.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
4.98
>>> p = preu_mitja(df, 'XL', 'home', 'NIEN HSING TEXTILE CO. LTD.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
0.00
>>> df = pd.read_csv('pantalons3.csv', parse_dates=['Data'])
>>> p = preu_mitja(df, 'M', 'unisex', 'NIEN HSING TEXTILE CO. LTD.')
>>> print(f'{p:.2f}')    # doctesttag: +TAG=5_preu_mitja
0.00
>>> p = preu_mitja(df, 'XL', 'unisex', 'TÈXTILS DEL SOL S.A.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
16.26
>>> p = preu_mitja(df, 'S', 'dona', 'Shanghai Yangji Car Accessories Co. Ltd.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
49.66
>>> p = preu_mitja(df, 'S', 'dona', 'MODA CATALANA XXI')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
5.59
>>> p = preu_mitja(df, 'L', 'dona', 'MODA CATALANA XXI')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
23.83
>>> df = pd.read_csv('pantalons4.csv', parse_dates=['Data'])
>>> p = preu_mitja(df, 'S', 'dona', 'POPPYS KNITWEAR PRIVATE')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
24.34
>>> p = preu_mitja(df, 'XS', 'unisex', 'ROBA URBANA GLOBAL')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
3.14
>>> p = preu_mitja(df, 'XS', 'dona', 'Shanghai Yangji Car Accessories Co. Ltd.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
9.41
>>> p = preu_mitja(df, 'S', 'unisex', 'TEXTILANDIA INTERNACIONAL')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
0.00
>>> p = preu_mitja(df, 'S', 'unisex', 'Shanghai Yangji Car Accessories Co. Ltd.')
>>> print(f'{p:.2f}')   # doctesttag: +TAG=5_preu_mitja
3.83