Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida com metodo para calculo

Estou tentando melhorar o código do curso agora que o terminei e estou com uma dúvida, criei um método que trata as condições de saque, o método está funcionando mas não subtrai o valor da taxa de transferência. Gostaria de saber se alguém sabe o que estou fazendo de errado no meu código

class Conta:

    def __init__(self, numero, titular, saldo, limite):
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__tarifaTransferencia = 8.0

    def extrato(self):
        print(f'O titular {self.__titular} tem saldo de {self.__saldo}')

    def sacar(self, valor):
        if(self.__if_saque(valor)):
            self.__saldo -= valor
        else:
            print(f'O valor de {valor} passou o limite para saque')

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

    **def transferir(self, valor, destino):
        if(self.valor_total(valor)):
            self.sacar(valor)
            destino.depositar(valor)
            print("Transferencia efetuada")
        else:
            print("Saldo insuficiente")**

    def __if_saque(self, valor_saque):
        valor_para_saque = self.__saldo + self.__limite
        return valor_saque <= valor_para_saque

    **def valor_total(self, valor_total):
        valor_transfere = self.saldo + self.limite - self.tarifaTransferencia
        return valor_total <= valor_transfere
**
    @property
    def saldo(self):
        return self.__saldo

    @property
    def titular(self):
        return self.__titular

    @property
    def limite(self):
        return self.__limite

    @property
    def tarifaTransferencia(self):
        return self.__tarifaTransferencia

    @limite.setter
    def limite(self, limite):
        self.__limite = limite

2 respostas
solução!

Sua função valor_total (abaixo) só está verificando se o saldo é suficiente para debitar a tarifa + valor da transferência, mas na hora de fazer o saque você tá fazendo saque de valor, que é o valor inicial sem a tarifa. Perceba que o valor que ela recebe como parâmetro, é o mesmo valor que você tá sacando, sem acréscimos.

def transferir(self, valor, destino):
        if(self.valor_total(valor)):
            self.sacar(valor)
            destino.depositar(valor)
            print("Transferencia efetuada")
        else:
            print("Saldo insuficiente")**

O que eu faria:

1 - Unificar as função de verificação se o saldo é suficiente, é a mesma lógica para saque e transferência, não precisa ter duas. Essa função ficaria assim:

      def disponibilidade(self, valor_saque):
            valor_disponivel = self.saldo + self.limite
            return valor_saque <= valor_disponivel

Aqui, para a rotina de sacar dinheiro, valor_saque vai ser o montante do saque, mesmo... no caso da transf, valor_saque vai ser o valor da tarifa + valor da transferência.

2 - Na função da transferência você vai chamar a rotina que verifica se o saldo é suficiente, já somando a tarifa

def transferencia(self, valor_transf, destino):
        valor_final = valor_transf + *******TARIFA********
        if self.disponibilidade(valor_final):
            self.saldo -= valor_final
            destino.deposito(valor_transf)
        else:
            print("O seu saldo é insuficiente para fazer esta transação")

Obrigado por compartilhar seu conhecimento!