-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathestacionamento.py
144 lines (116 loc) · 5.1 KB
/
estacionamento.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class Estacionamento:
total_vagas_de_carro = 5
total_vagas_de_moto = 5
def __init__(self):
self.vagas_de_carro = {1: 'livre', 2: 'livre', 3: 'livre', 4: 'livre', 5: 'livre'}
self.vagas_de_moto = {6: 'livre', 7: 'livre', 8: 'livre', 9: 'livre', 10: 'livre'}
def exibe_vagas_livres(self):
count_vagas_carro = 0
count_vagas_moto = 0
for vaga in self.vagas_de_carro:
if vagas_de_carro[vaga] == 'livre':
count_vagas_carro += 1
for vaga in self.vagas_de_moto:
if vagas_de_moto[vaga] == 'livre':
count_vagas_moto += 1
print(f'\nVagas de carro livres: {count_vagas_carro}')
print(f'Vagas de moto livres: {count_vagas_moto}')
def __str__(self):
return f'\nVagas de carro: {self.vagas_de_carro} \n' \
f'Vagas de moto: {self.vagas_de_moto} \n\n'
class Veiculo:
def __init__(self, placa, estacionado):
self.placa = placa
self.estacionado = estacionado
class Carro(Veiculo):
def __init__(self, placa, estacionado): # Sobrescrevendo o construtor da classe mãe
super().__init__(placa, estacionado) # Herdando os métodos da classe mãe
def estacionar(self, vagas_de_carro):
if 'livre' in vagas_de_carro.values():
for vaga in vagas_de_carro:
if vagas_de_carro[vaga] == 'livre':
vagas_de_carro[vaga] = self.placa
self.estacionado = True
break
else:
print(f'\nO estacionamento está lotado para carros.')
def desocupar_vaga(self, vagas):
if self.placa in vagas.values():
for vaga in vagas:
if vagas[vaga] == self.placa:
vagas[vaga] = 'livre'
self.estacionado = False
break
else:
print(f'\nEste carro não está estacionado nessas vagas!')
class Moto(Veiculo):
def __init__(self, placa, estacionado): # Sobrescrevendo o construtor da classe mãe
super().__init__(placa, estacionado) # Herdando os métodos da classe mãe
def estacionar_nas_vagas_de_moto(self, vagas_de_moto):
if 'livre' in vagas_de_moto.values():
for vaga in vagas_de_moto:
if vagas_de_moto[vaga] == 'livre':
vagas_de_moto[vaga] = self.placa
self.estacionado = True
break
else:
print(f'\nAs vagas de moto estão lotadas. Estacione nas vagas para carro')
def estacionar_nas_vagas_de_carro(self, vagas_de_moto, vagas_de_carro):
if 'livre' not in vagas_de_moto.values():
if 'livre' in vagas_de_carro.values():
for vaga in vagas_de_carro:
if vagas_de_carro[vaga] == 'livre':
vagas_de_carro[vaga] = self.placa
self.estacionado = True
break
else:
print('As vagas de carro também estão lotadas!')
else:
print('Não é permitido estacionar nas vagas de carro se ainda existem vagas livres para motos!')
def desocupar_vaga(self, vagas):
if self.placa in vagas.values():
for vaga in vagas:
if vagas[vaga] == self.placa:
vagas[vaga] = 'livre'
self.estacionado = False
break
else:
print(f'\nEsta moto não está estacionada nessas vagas!')
estacionamento1 = Estacionamento()
vagas_de_carro = estacionamento1.vagas_de_carro
vagas_de_moto = estacionamento1.vagas_de_moto
gol = Carro('ABC1234', False)
gol.estacionar(vagas_de_carro)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
gol.desocupar_vaga(vagas_de_carro)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
motinho = Moto('FG56', False)
motinho.estacionar_nas_vagas_de_moto(vagas_de_moto)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
# Não irá permitir estacionar nas vagas de carro, pois ainda há vagas de moto livres
motinho.estacionar_nas_vagas_de_carro(vagas_de_moto, vagas_de_carro)
yamaha = Moto('5645', False)
yamaha.estacionar_nas_vagas_de_moto(vagas_de_moto)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
harley = Moto('5464', False)
harley.estacionar_nas_vagas_de_moto(vagas_de_moto)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
scooter = Moto('222', False)
scooter.estacionar_nas_vagas_de_moto(vagas_de_moto)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
suzuki = Moto('222', False)
suzuki.estacionar_nas_vagas_de_moto(vagas_de_moto)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
motinho2 = Moto('(moto)333', False)
motinho2.estacionar_nas_vagas_de_carro(vagas_de_moto, vagas_de_carro)
estacionamento1.exibe_vagas_livres()
print(estacionamento1)
motinho3 = Moto('754', False)
motinho3.desocupar_vaga(vagas_de_moto) # Irá retornar msg de que veículo não está estacionado