Oi Lucas, tudo bem com você?
O professor utilizou o arquivo main.py somente no início do treinamento, porém, ao decorrer do curso, o foco foi total em relação aos testes. Como foi garantido que os testes estão passando, no arquivo principal, eles também devem funcionar como esperado. Tudo bem?
Para fazer a integração entre o lance a carteira de cada usuário, devemos recapitular alguns pontos:
- Temos uma classe responsável por cadastrar um usuário, que recebe como parâmetro o nome do usuário e o valor da carteira.
- Como métodos dessa classe, temos o
propoe_lance(leilao, valor)
que é responsável por verificar se o valor é válido e em caso afirmativo, irá propor esse lance no leilao passado como parâmetro. E como esse método faz isso? Ele irá chamar o método propoe
do leilao que passamos por parâmetro, ou seja, dizemos assim: - classe leilao, está tudo certo com o valor, proproe esse lance no seu leilao. E após propor o lance no leilão, diminuímos o valor da carteira.
def propoe_lance(self, leilao, valor):
if not self._valor_eh_valido(valor):
raise LanceInvalido('Não pode propor um lance com o valor maior que o valor da carteira')
lance = Lance(self, valor) # criamos um lance com o valor passado
leilao.propoe(lance) # chamamos o propoe da classe leilao
self.__carteira -= valor
Sendo assim, no arquivo main.py tudo que precisamos é criar um usuário e um leilão, pois, a classe Lance, indiretamente está sendo chamada dentro da classe Usuário, bem como o método propoe da classe Leilao. Vamos por partes, primeiro vamos cadastrar os usuários:
# Cadastrando usuários
lucas = Usuario('Lucas', 1000)
mariana = Usuario('Mariana', 1000)
joao = Usuario('João',1000)
Após dizer quais são os usuários e seus respectivos valores na carteira, vamos cadastrar o Leilão:
# Criando o Leilão
leilao_mobile = Leilao('Mobile')
Agora, podemos propor os lances, mas lembra que na classe usuário temos um método que internamente irá propor o lance conforme o leilão passado? Pois bem, podemos chamá-lo:
# Propondo o lance
lucas.propoe_lance(leilao_mobile, 100)
mariana.propoe_lance(leilao_mobile, 150)
joao.propoe_lance(leilao_mobile, 200)
Por fim, podemos printar qual foi o valor que cada usuário propôs e quanto ainda há em sua carteira, e também o valor de menor e maior lance:
for lance in leilao_mobile.lances:
print(f'O usuario {lance.usuario.nome} deu um lance de {lance.valor} - Sua carteira agora tem R$ {lance.usuario.carteira}')
print(f'Menor Lance: {leilao_mobile.menor_lance} e Maior Lance: {leilao_mobile.maior_lance}.')
Código completo:
from src.leilao.dominio import Usuario, Leilao
# Cadastrando usuários
lucas = Usuario('Lucas', 1000)
mariana = Usuario('Mariana', 1000)
joao = Usuario('João',1000)
# Criando o Leilão
leilao_mobile = Leilao('Mobile')
# Propondo o lance
lucas.propoe_lance(leilao_mobile, 100)
mariana.propoe_lance(leilao_mobile, 150)
joao.propoe_lance(leilao_mobile, 200)
for lance in leilao_mobile.lances:
print(f'O usuario {lance.usuario.nome} deu um lance de {lance.valor} - Sua carteira agora tem R$ {lance.usuario.carteira}')
print(f'Menor Lance: {leilao_mobile.menor_lance} e Maior Lance: {leilao_mobile.maior_lance}.')
Ficou mais claro?
Qualquer dúvida fique a vontade, estou a disposição. Abraços e bons estudos!