1
resposta

main.py

Fiquei confuso em relação à implementação do main.py

No final não foi feito qualquer alteração no main e, ao meu ver, deixou o curso incompleto.

Fiz um teste criando 3 usuarios e 3 lances, mas não consigo faz uma integração entre o lance e a carteira de cada usuário. Não ví este procedimento nas aulas.

Por exemplo, ao final do main.py, se testarmos o valor da carteira, é como se não tivesse sido feita qualquer redução.

main.py

from auction.dominio import User, Bid, Auction

lucas = User('Lucas', 1000)

mariana = User('Mariana', 1000)

joao = User('João',1000)

lucas_bid = Bid(lucas, 100)

mariana_bid = Bid(mariana, 150)

joao_bid = Bid(joao, 200)

auction = Auction('Mobile')

auction.offer(lucas_bid)

auction.offer(mariana_bid)

auction.offer(joao_bid)

for bid in auction.bid: print(f'User {bid.user.name} bid is US$ {bid.bid_value}')

print(f'Lowest bid: {auction.lowest_bid} and Highest bid: {auction.highest_bid}.')

1 resposta

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!