-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdominio.py
75 lines (56 loc) · 1.99 KB
/
dominio.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
from leilao.tests.excecoes import LanceInvalido
class Usuario:
def __init__(self, nome, carteira):
self.__nome = nome
self.__carteira = carteira
@property
def carteira(self):
return self.__carteira
@property
def nome(self):
return self.__nome
def propor_lance(self, leilao, valor):
if self._valor_eh_valido(valor):
lance = Lance(self, valor)
leilao.propoe(lance)
self.__carteira -= valor
else:
raise LanceInvalido('valor indisponível na carteira')
def _valor_eh_valido(self, valor):
return valor <= self.carteira
class Lance:
def __init__(self, usuario, valor):
self.usuario = usuario
self.valor = valor
class Leilao:
def __init__(self, descricao):
self.descricao = descricao
self.__lances = []
self.menor_lance = 0
self.maior_lance = 0
def __str__(self):
for lance in self.lances:
return f'lances do {lance.usuario.nome} foi de {lance.valor}'
def propoe(self, lance: Lance):
if self._lance_valido(lance):
if not self._tem_lance():
self.menor_lance = lance.valor
self.maior_lance = lance.valor
self.__lances.append(lance)
@property
def lances(self):
return self.__lances[:]
def _tem_lance(self):
return self.__lances
def _usuarios_sao_diferentes(self, lance):
if self.lances[-1].usuario != lance.usuario:
return True
else:
raise LanceInvalido('O mesmo usuario não pode dar dois lances seguidos')
def _valor_maior_que_o_anterior(self, lance):
if lance.valor > self.lances[-1].valor:
return True
else:
raise LanceInvalido("O lance não pode ser menor que o ultimo lance")
def _lance_valido(self, lance):
return not self._tem_lance() or self._usuarios_sao_diferentes(lance) and self._valor_maior_que_o_anterior(lance)