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

Nao consigo checar o saldo

Fiz um incremento no código para que o programa checasse o saldo antes de autorizar ou nao um saque. Legal, funcionou.

Porem na hora de fazer a transferencia (que seria as funções saque e deposito em série) o código nao serve. Então eu criei uma variavel bool, cujo valor seria em função do sucesso do saque, MAS nao estou conseguindo trazer essa variavel pra função "transfere". Ja tentei o return, ja tentei declarar a variavel no def da função, porem não vai. Como faço isso?

class Conta:
    def __init__(self, numero, titular, saldo, limite):
        print("Constuindo objeto...{}" .format(self))
        self.__numero = numero
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite #informar o numero sempre negativo

    def extrato(self):
        print ("O saldo da conta {} é {}" .format(self.__numero, self.__saldo))

    def deposita(self, valor):
        self.__saldo += valor
        print("Depositado o valor de {} na conta {}. O saldo agora é de {}" .format(valor, self.__numero, self.__saldo))

    def saca(self, valor):
        novo_saldo = self.__saldo - valor
        if novo_saldo >= 0:
            self.__saldo -= valor
            print("Retirado o valor de {} na conta {}. O saldo agora é de {}." .format(valor, self.__numero, self.__saldo))
            saca_sucesso = True
        elif (novo_saldo < 0  and novo_saldo >= self.__limite):
            self.__saldo -= valor
            print("Retirado o valor de {} na conta {}. O saldo agora é de {} e voce está utilizando o valor limite de máximo até {}." .format(valor, self.__numero,self.__saldo, self.__limite))
            saca_sucesso = True
        else:
            valor_max = self.__saldo + abs(self.__limite)
            print("Valor não disponível para saque. O seu saldo atual é de {} e o saque maximo é de {}" .format(self.__saldo, valor_max))
            saca_sucesso = False
        return saca_sucesso

    def transfere(self, valor, destino):
        self.saca(valor)
        if saca_sucesso == True:
            destino.deposita(valor)
        else:
            print("Deposito fracassou. Verificar")


3 respostas

Você precisa fazer

if self.saca(valor) == True

porque a função ja está retornando um bool

solução!

Olá Daniel Para não ter muitos Ifs e Elifs no seu código é interessante você definir funções para verificação !

Eu dei uma corrigida no seu código já definindo uma função adequada !

    def pode_sacar(self, valor_a_sacar):
        valor_disponivel = self.__saldo + self.__limite
        return valor_a_sacar <= valor_disponivel

    def saca(self, valor):
        if self.pode_sacar(valor):
            self.__saldo -= valor
            print("Saque concluido !")
        else:
            print("O valor {} passou o limite".format(valor))


    def transfere(self, valor, destino):
        if self.pode_sacar(valor):
            self.saca(valor)
            destino.deposita(valor)
        else:
            print("Dinheiro indisponível!")

Nota-se que ao definir essa função o código fica um pouco mais legível Eu repeti no deftranfere() o if do pode_sacar pois ao chamar o tranfere , mesmo que o sacar não fosse confirmado o valor era depositado !

Oi Henrique tudo bem? Realmente ficou melhor rs

Obrigado!