Solució de l’examen parcial¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
11 d’abril 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
Tests classe Parking¶
>>> from parkings import Parking
>>> from datetime import datetime
>>> p = Parking(20)
>>> p.matricules # doctesttag: +TAG=1_parking
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=1_parking
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
>>> len(p) # doctesttag: +TAG=1_parking
20
>>> p.aparca(10, '9876-MKF', datetime(2025, 5, 11, hour=10, minute=0))
>>> p.matricules # doctesttag: +TAG=1_parking
['', '', '', '', '', '', '', '', '', '', '9876-MKF', '', '', '', '', '', '', '', '', '']
>>> p.arribades[10] # doctesttag: +TAG=1_parking
datetime.datetime(2025, 5, 11, 10, 0)
>>> p.arribades # doctesttag: +TAG=1_parking
[None, None, None, None, None, None, None, None, None, None, datetime.datetime(2025, 5, 11, 10, 0), None, None, None, None, None, None, None, None, None]
>>> p.ocupacio() # doctesttag: +TAG=1_parking
(1, 19)
>>> p.aparca(3, '2222-RRR', datetime(2025, 5, 11, hour=12, minute=12))
>>> p.aparca(8, '1111-TTT', datetime(2025, 5, 11, hour=12, minute=12))
>>> p.ocupacio() # doctesttag: +TAG=1_parking
(3, 17)
>>> p.matricules # doctesttag: +TAG=1_parking
['', '', '', '2222-RRR', '', '', '', '', '1111-TTT', '', '9876-MKF', '', '', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=1_parking
[None, None, None, datetime.datetime(2025, 5, 11, 12, 12), None, None, None, None, datetime.datetime(2025, 5, 11, 12, 12), None, datetime.datetime(2025, 5, 11, 10, 0), None, None, None, None, None, None, None, None, None]
>>> p.desaparca(3)
>>> p.aparca(4, '1111-AAA', datetime(2025, 5, 11, hour=13))
>>> p.aparca(5, '2222-BBB', datetime(2025, 6, 11, hour=17))
>>> p.aparca(6, '3333-CCC', datetime(2025, 6, 11, hour=10))
>>> p.aparca(12,'4444-DDD', datetime(2025, 8, 11, hour=5))
>>> p.ocupacio() # doctesttag: +TAG=1_parking
(6, 14)
>>> p.matricules # doctesttag: +TAG=1_parking
['', '', '', '', '1111-AAA', '2222-BBB', '3333-CCC', '', '1111-TTT', '', '9876-MKF', '', '4444-DDD', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=1_parking
[None, None, None, None, datetime.datetime(2025, 5, 11, 13, 0), datetime.datetime(2025, 6, 11, 17, 0), datetime.datetime(2025, 6, 11, 10, 0), None, datetime.datetime(2025, 5, 11, 12, 12), None, datetime.datetime(2025, 5, 11, 10, 0), None, datetime.datetime(2025, 8, 11, 5, 0), None, None, None, None, None, None, None]
>>> p['2222-RRR'] # doctesttag: +TAG=1_parking
-1
>>> p['3333-CCC'] # doctesttag: +TAG=1_parking
6
>>> p['1111-TTT'] # doctesttag: +TAG=1_parking
8
>>> p.desaparca(5)
>>> p.desaparca(6)
>>> p.ocupacio() # doctesttag: +TAG=1_parking
(4, 16)
>>> p.matricules # doctesttag: +TAG=1_parking
['', '', '', '', '1111-AAA', '', '', '', '1111-TTT', '', '9876-MKF', '', '4444-DDD', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=1_parking
[None, None, None, None, datetime.datetime(2025, 5, 11, 13, 0), None, None, None, datetime.datetime(2025, 5, 11, 12, 12), None, datetime.datetime(2025, 5, 11, 10, 0), None, datetime.datetime(2025, 8, 11, 5, 0), None, None, None, None, None, None, None]
>>> len(p) # doctesttag: +TAG=1_parking
20
>>> q = Parking(7)
>>> q.aparca(2, '2222-BBB', datetime(2025, 5, 11, hour= 9))
>>> q.aparca(4, '3333-CCC', datetime(2025, 5, 11, hour=10))
>>> q.aparca(0, '4444-DDD', datetime(2025, 5, 12, hour=11))
>>> q.aparca(6, '1111-AAA', datetime(2025, 5, 12, hour=12))
>>> q.aparca(5, '5555-EEE', datetime(2025, 5, 12, hour=16))
>>> len(q) # doctesttag: +TAG=1_parking
7
>>> q.matricules # doctesttag: +TAG=1_parking
['4444-DDD', '', '2222-BBB', '', '3333-CCC', '5555-EEE', '1111-AAA']
>>> q.arribades # doctesttag: +TAG=1_parking
[datetime.datetime(2025, 5, 12, 11, 0), None, datetime.datetime(2025, 5, 11, 9, 0), None, datetime.datetime(2025, 5, 11, 10, 0), datetime.datetime(2025, 5, 12, 16, 0), datetime.datetime(2025, 5, 12, 12, 0)]
>>> q.ocupacio() # doctesttag: +TAG=1_parking
(5, 2)
>>> q['3333-CCC'] # doctesttag: +TAG=1_parking
4
>>> q['RRR'] # doctesttag: +TAG=1_parking
-1
>>> q.desaparca(6)
>>> q.desaparca(2)
>>> q.desaparca(5)
>>> q.aparca(2, '6666-FFF', datetime(2025, 8, 12, hour=20))
>>> len(q) # doctesttag: +TAG=1_parking
7
>>> q.ocupacio() # doctesttag: +TAG=1_parking
(3, 4)
>>> q.matricules # doctesttag: +TAG=1_parking
['4444-DDD', '', '6666-FFF', '', '3333-CCC', '', '']
>>> q.arribades
[datetime.datetime(2025, 5, 12, 11, 0), None, datetime.datetime(2025, 8, 12, 20, 0), None, datetime.datetime(2025, 5, 11, 10, 0), None, None]
>>> q['1111-AAA'] # doctesttag: +TAG=1_parking
-1
>>> q['6666-FFF'] # doctesttag: +TAG=1_parking
2
Tests classe Parking iterable¶
>>> from parkings import Parking
>>> from datetime import datetime
>>> p = Parking(11)
>>> p.aparca(2, '1234-ABC', datetime(2025, 5, 11, hour=10, minute=0))
>>> p.aparca(5, '2126-RRR', datetime(2025, 5, 11, hour=12, minute=0))
>>> p.aparca(1, '8364-VTL', datetime(2025, 5, 11, hour=13, minute=0))
>>> p.aparca(3, '2222-MKF', datetime(2025, 5, 13, hour=12, minute=0))
>>> p.aparca(8, 'B-5632-NB', datetime(2025, 5, 17, hour=13, minute=0))
>>> if '__iter__' in dir(p):
... for matricula in p: # doctesttag: +TAG=2_iterp
... print(matricula)
8364-VTL
1234-ABC
2222-MKF
2126-RRR
B-5632-NB
>>> for i in [4,6,7,9,0]:
... p.aparca(i, f"G-{i*100:04d}", datetime(2025, 7, 2, hour=i+2))
>>> if '__iter__' in dir(p):
... for matricula in p: # doctesttag: +TAG=2_iterp
... print(matricula)
G-0000
8364-VTL
1234-ABC
2222-MKF
G-0400
2126-RRR
G-0600
G-0700
B-5632-NB
G-0900
>>> q = Parking(100)
>>> for i in range(20):
... q.aparca((i*17)%100, f"X-{i:06d}", datetime(2020, 7, 1, hour=i%24))
>>> if '__iter__' in dir(p):
... for matricula in q: # doctesttag: +TAG=2_iterp
... print(matricula)
X-000000
X-000006
X-000012
X-000018
X-000001
X-000007
X-000013
X-000019
X-000002
X-000008
X-000014
X-000003
X-000009
X-000015
X-000004
X-000010
X-000016
X-000005
X-000011
X-000017
>>> q = Parking(200)
>>> for i in range(20):
... q.aparca((i*123)%200, f"X-{i:06d}", datetime(2020, 7, 1, hour=i%24))
>>> if '__iter__' in dir(p):
... list(q) # doctesttag: +TAG=2_iterp
['X-000000', 'X-000018', 'X-000005', 'X-000010', 'X-000015', 'X-000002', 'X-000007', 'X-000012', 'X-000017', 'X-000004', 'X-000009', 'X-000014', 'X-000001', 'X-000019', 'X-000006', 'X-000011', 'X-000016', 'X-000003', 'X-000008', 'X-000013']
Tests classe RoboPark¶
>>> from roboparks import RoboPark
>>> from datetime import datetime
>>> p = RoboPark('Via Augusta, 89', 9)
>>> p.adr # doctesttag: +TAG=3_robopark
'Via Augusta, 89'
>>> p.matricules == [''] * 9 # doctesttag: +TAG=3_robopark
True
>>> p.arribades == [None] * 9 # doctesttag: +TAG=3_robopark
True
>>> len(p) # doctesttag: +TAG=3_robopark
9
>>> p.aparca('1234-ABC', datetime(2025, 5, 11, hour=10, minute=20))
>>> p.aparca('9876-MKF', datetime(2025, 5, 11, hour=10, minute=0))
>>> p.matricules # doctesttag: +TAG=3_robopark
['1234-ABC', '9876-MKF', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=3_robopark
[datetime.datetime(2025, 5, 11, 10, 20), datetime.datetime(2025, 5, 11, 10, 0), None, None, None, None, None, None, None]
>>> p.ocupacio() # doctesttag: +TAG=3_robopark
(2, 7)
>>> p.desaparca('1234-ABC')
>>> p.matricules # doctesttag: +TAG=3_robopark
['', '9876-MKF', '', '', '', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=3_robopark
[None, datetime.datetime(2025, 5, 11, 10, 0), None, None, None, None, None, None, None]
>>> p.aparca('2126-RRR', datetime(2025, 5, 12, hour=12, minute=12))
>>> p.aparca('B-1578-TL', datetime(2025, 5, 16, hour= 7, minute=34))
>>> p.aparca('GGG', datetime(2025, 5, 19, hour= 17))
>>> p.aparca('SSS', datetime(2025, 5, 20, hour= 7))
>>> p.matricules # doctesttag: +TAG=3_robopark
['2126-RRR', '9876-MKF', 'B-1578-TL', 'GGG', 'SSS', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=3_robopark
[datetime.datetime(2025, 5, 12, 12, 12), datetime.datetime(2025, 5, 11, 10, 0), datetime.datetime(2025, 5, 16, 7, 34), datetime.datetime(2025, 5, 19, 17, 0), datetime.datetime(2025, 5, 20, 7, 0), None, None, None, None]
>>> p.desaparca('GGG')
>>> p.desaparca('2126-RRR')
>>> p.desaparca('9876-MKF')
>>> p.desaparca('2126-RRR')
>>> p.desaparca('TTT')
>>> p.aparca('PPP', datetime(2025, 11, 3, hour= 5))
>>> p.matricules # doctesttag: +TAG=3_robopark
['PPP', '', 'B-1578-TL', '', 'SSS', '', '', '', '']
>>> p.arribades # doctesttag: +TAG=3_robopark
[datetime.datetime(2025, 11, 3, 5, 0), None, datetime.datetime(2025, 5, 16, 7, 34), None, datetime.datetime(2025, 5, 20, 7, 0), None, None, None, None]
>>> p.ocupacio() # doctesttag: +TAG=3_robopark
(3, 6)
Tests funció preu¶
>>> from parkings import Parking
>>> from datetime import datetime
>>> from cobrament import preu
>>> p = Parking(10)
>>> p.aparca(3, '9876-MKF', datetime(2025, 5, 12, hour=10, minute=0))
>>> p.aparca(6, '1234-ABC', datetime(2025, 5, 13, hour=10, minute=20))
>>> preu(p, '9876-MKF', datetime(2025, 5, 12, hour=12, minute=0)) # doctesttag: +TAG=4_preu
11.0
>>> preu(p, '9876-MKF', datetime(2025, 5, 12, hour=12, minute=20)) # doctesttag: +TAG=4_preu
11.5
>>> preu(p, '1234-ABC', datetime(2025, 5, 13, hour=17, minute=20)) # doctesttag: +TAG=4_preu
13.5
>>> preu(p, '1234-ABC', datetime(2025, 5, 18, hour=12, minute=20)) # doctesttag: +TAG=4_preu
71.0
>>> preu(p, '9876-MKF', datetime(2025, 6, 12, hour=17, minute=1)) # doctesttag: +TAG=4_preu
386.0
>>> preu(p, '1234-ABC', datetime(2025, 7, 4, hour=9, minute=0)) # doctesttag: +TAG=4_preu
633.5