1
resposta

Correção na transferência de dinheiro

Eu fiquei um pouco incomodado que o professor tentou corrigir o saque no código mas ele não resolveu a parte da transferência, uma conta com R$1000 de saldo e limite somados poderia enviar por exemplo R$ 1500 para outra conta, a mensagem falando que a conta não tinha dinheiro suficiente aparecia e o dinheiro permanecia na conta original mas a conta que ia receber o dinheiro, ainda recebia tudo sem problemas, eu corrigi o erro quando eu vi que o professor não ia resolve-lo. PS: eu não sei se eu deveria enviar uma correção de código aqui, qualquer coisa me avisem que eu envio para o local correto



class Conta:

    def __init__(self, numero, titular, saldo, limite):
        print(f'Construindo objeto ... {self}')
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite

    def deposito(self, valor):
        self.__saldo += valor

    def __permicao_de_saque(self, valor):
        return valor <= (self.__saldo + self.limite)

    def saque(self, valor):
        if self.__permicao_de_saque(valor):
            if (self.__saldo - valor) < 0:
                self.__limite += self.__saldo - valor
                self.__saldo = 0
            else:
                self.__saldo -= valor
            return True
        else:
            print(f'Este valor ultrapassa o seu limite de saque em R${valor - (self.__saldo + self.__limite)}')
            return False

    def transferencia(self, valor, destino):
        if self.saque(valor):
            destino.deposito(valor)
        else:
            print('Não foi possível concluir a transferencia')
1 resposta

Olá Marco, tudo bem com você?

Meus parabéns pela implementação do código e por compartilhá-lo com a comunidade do fórum Alura, continue sempre pensando em como aprimorar um projeto e coloque em prática suas ideias.

Testando o seu código, vi que foi necessário fazer apenas uma mudança para que ele funcionasse sem erros.

No método __permicao_de_saque, quando é feito a soma entre o saldo é o limite, faltou dois underscores () no self.limite para fazer referência ao atributo privado do limite. Fazendo essa mudança o código funciona normalmente, deixo abaixo o ponto onde foi realizada a correção.

    def __permicao_de_saque(self, valor):
        return valor <= (self.__saldo + self.__limite)

Sobre sua dúvida se mandou no local correto a correção de um código, digo que sim, sempre que tiver uma dica de implementação ou queira compartilhar uma ideia, use o fórum, lembre-se de que o poderá contar com o fórum também em caso de dúvidas.

Coloco-me à disposição.

Abraços e bons estudos.