3
respostas

Duvida no método transferencia

Estou com dúvidas no método transferência,pois se o usuário digitar um valor para transferência acima do saldo disponível,esse valor é transferido a outra conta mesmo o programa acusando que a conta origem não tem esse saldo disponível.

class Conta:

    def __init__(self,numero,titular,saldo,limite):
        print(f'Objeto criado {self}')
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__tarifaTransferencia = 7.5

    def extrato(self):
        print(f'Cliente {self.__titular} possui em sua conta o valor de {self.__saldo} reais e um limite de {self.__limite} reais')

    def __saque_disponivel(self,valor_para_saque):
        valor_disponivel_saque = self.__saldo
        return valor_para_saque <= valor_disponivel_saque

    def saque(self,valor):
        if self.__saque_disponivel(valor):
            self.__saldo -= valor
        else:
            print(f'Valor {valor} reais indisponível!A conta não possui esse saldo para retirada.')

    def __valor_deposito(self,valor_para_deposito):
        valor_disponivel_deposito = self.__limite - self.__saldo
        return valor_para_deposito <= valor_disponivel_deposito

    def deposito(self,valor):
        if self.__valor_deposito(valor):
            self.__saldo += valor
        else:
            print(f'Não foi possível concluir a operação.A conta possui um limite de {self.__limite} reais!')

    def transferencia(self, valor, destino):
        self.saque(valor)
        destino.deposito(valor)
3 respostas

Olá,

fiz uns testes aqui e aparentemente não está sendo transferido

class Conta:

    def __init__(self,numero,titular,saldo,limite):
        # print(f'Objeto criado {self}')
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__tarifaTransferencia = 7.5

    def extrato(self):
        print(f'Cliente {self.__titular} possui em sua conta o valor de {self.__saldo} reais e um limite de {self.__limite} reais')

    def __saque_disponivel(self,valor_para_saque):
        valor_disponivel_saque = self.__saldo
        return valor_para_saque <= valor_disponivel_saque

    def saque(self,valor):
        if self.__saque_disponivel(valor):
            self.__saldo -= valor
        else:
            print(f'\tValor {valor} reais indisponível!A conta não possui esse saldo para retirada.')

    def __valor_deposito(self,valor_para_deposito):
        valor_disponivel_deposito = self.__limite - self.__saldo
        return valor_para_deposito <= valor_disponivel_deposito

    def deposito(self,valor):
        if self.__valor_deposito(valor):
            self.__saldo += valor
        else:
            print(f'\tNão foi possível concluir a operação.A conta possui um limite de {self.__limite} reais!')

    def transferencia(self, valor, destino):
        print(f'\tTransferindo {valor} da conta {self.__numero} para a conta {destino.__numero}')
        self.saque(valor)
        destino.deposito(valor)


if __name__ == '__main__':
    c1 = Conta(1, '1', 1000.0, 500.0)
    c2 = Conta(2, '2', 1000.0, 500.0)

    c1.extrato()
    c2.extrato()

    c1.transferencia(1100.0, c2)

    c1.extrato()
    c2.extrato()
Cliente 1 possui em sua conta o valor de 1000.0 reais e um limite de 500.0 reais
Cliente 2 possui em sua conta o valor de 1000.0 reais e um limite de 500.0 reais
    Transferindo 1100.0 da conta 1 para a conta 2
    Valor 1100.0 reais indisponível!A conta não possui esse saldo para retirada.
    Não foi possível concluir a operação.A conta possui um limite de 500.0 reais!
Cliente 1 possui em sua conta o valor de 1000.0 reais e um limite de 500.0 reais
Cliente 2 possui em sua conta o valor de 1000.0 reais e um limite de 500.0 reais

[]'s

Acho que você tem que ajustar o saque disponível para somar o límite

    def __saque_disponivel(self,valor_para_saque):
        valor_disponivel_saque = self.__saldo + self._limite
        return valor_para_saque <= valor_disponivel_saque

Não testei pois vou jantar agora mas dá uma conferida nisso, vou jantar e testo e te digo melhor

Opa, tudo em paz, fiz um testes aqui e achei algumas coisas, primeiro tu tava fazendo mais verificações do que o necessário, por exemplo:

def deposito(self,valor):
        if self.__valor_deposito(valor):
            self.__saldo += valor
        else:
            print(f'Não foi possível concluir a operação.A conta possui um limite de {self.__limite} reais!')

Aqui por exemplo cê tá fazendo uma if que não cabe aí porque essa verificação de limite ela é feita aqui:

    def __saque_disponivel(self,valor_para_saque):
        valor_disponivel_saque = self.__saldo + self.__limite
        return valor_para_saque <= valor_disponivel_saque

E aqui você tem que somar ao saldo o limite se não ele nunca vai conseguir dizer realmente quanto você tem pra saque Eu só não matei a charada de mudar o limite, pra mim ele ainda tá dando fixo como 500 mas a transferencia está acontecendo:

class Conta:

    def __init__(self,numero,titular,saldo,limite):
        print(f'Objeto criado {self}')
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.__tarifaTransferencia = 7.5

    def extrato(self):
        print(f'Cliente {self.__titular} possui em sua conta o valor de {self.__saldo} reais e um limite de {self.__limite} reais')

    def __saque_disponivel(self,valor_para_saque):
        valor_disponivel_saque = self.__saldo + self.__limite
        return valor_para_saque <= valor_disponivel_saque

    def saque(self,valor):
        if self.__saque_disponivel(valor):
            self.__saldo -= valor
        else:
            print(f'Valor {valor} reais indisponível!A conta não possui esse saldo para retirada.')

    def __valor_deposito(self,valor_para_deposito):
        valor_disponivel_deposito = self.__limite - self.__saldo
        return valor_para_deposito <= valor_disponivel_deposito

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

    def transferencia(self, valor, destino):
        self.saque(valor)
        destino.deposito(valor)


if __name__ == '__main__':
    c1 = Conta(1, '1', 1000.0, 500.0)
    c2 = Conta(2, '2', 1000.0, 500.0)

    c1.extrato()
    c2.extrato()

    c1.transferencia(1100.0, c2)

    c1.extrato()
    c2.extrato()