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

entrada da conta e operação como dado variável

Oi pessoal, tudo bem?

Como eu poderia fazer para chamar os dados da conta como uma variável? Eu quero que os dados da conta corrente e a operação a ser realizada sejam as entradas de usuário. Estória:

Como correntista, gostaria que o resultado da operação fosse exibido ao entrar com o número da conta corrente e a operação a ser realizada.

Tentei criar uma outra instância, menu.py. Criei algumas contas e no final substituí as variávies, mas não deu certo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

from conta import Conta

conta1 = Conta(123, "Rafael", 800, 1000)
conta2 = Conta(456, "Ciclano", 600, 2000)
conta3 = Conta(789, "Fulano", 700, 2000)
conta4 = Conta(321, "Beltrano", 800, 3000)

consulta = input("Digite a conta: ")
operacao = input("Digite a operacao: ")
print(consulta)
print(type(consulta))
print(operacao)

consulta.extrato()

o meu conta.py está chamando a classe os objetos isoladamente corretamente:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

class Conta:
    def __init__(self, numero_conta, nome_titular, saldo_conta, limite_conta):
        self.__numero = numero_conta
        self.__titular = nome_titular
        self.__saldo = saldo_conta


    def extrato(self):
            print("Olá {}, o seu saldo é R${}" .format(self.__titular, self.__saldo))

    def  deposito(self, deposito):
        self.__saldo = deposito + self.__saldo
        print("{}, o seu novo saldo é de R${}".format(self.__titular, self.__saldo))

    def  saque(self, saque):
        self.__saldo = self.__saldo - saque
        print("{}, o seu novo saldo é de R${}".format(self.__titular, self.__saldo))

    def transfere(self, valor, conta1, conta2):
        conta1.saque(valor)
        conta2.deposito(valor)

Sei que não faz parte do escopo da aula, mas seria algo a mais pra se aprender. Alguém se habilita em ajudar?

Obrigado!!!

3 respostas
solução!

Oi Rafael, tudo bem?

Primeiramente, é ótimo ver o seu interesse em aprender e aperfeiçoar suas habilidades em programação Python. Compreendo que você deseja tornar a entrada dos dados da conta e operação mais flexível, permitindo que o usuário informe esses valores e obtenha o resultado da operação de forma interativa.

Para atingir esse objetivo, é importante que você faça algumas modificações no seu código para receber as entradas do usuário e executar as operações corretamente. Vou guiar você passo a passo através das alterações necessárias.

  1. Modificando a Classe Conta: Vamos ajustar a classe Conta para que ela possa aceitar a entrada do número da conta corrente, nome do titular, saldo e limite como parâmetros da criação do objeto. Assim, quando criarmos uma nova conta, poderemos passar os valores diretamente.

    class Conta:
        def __init__(self, numero_conta, nome_titular, saldo_conta, limite_conta):
            self.__numero = numero_conta
            self.__titular = nome_titular
            self.__saldo = saldo_conta
            self.__limite = limite_conta
    
        # Restante das funções continua igual
    
  2. Obtendo a Entrada do Usuário: Agora, precisamos adaptar o código onde você cria as contas para obter as informações do usuário. Vamos substituir as instâncias fixas por entradas do usuário usando a função input(). Também vamos converter as entradas de saldo e limite para números inteiros usando int():

    numero_conta = int(input("Digite o número da conta: "))
    nome_titular = input("Digite o nome do titular: ")
    saldo_conta = int(input("Digite o saldo da conta: "))
    limite_conta = int(input("Digite o limite da conta: "))
    
    conta1 = Conta(numero_conta, nome_titular, saldo_conta, limite_conta)
    
  3. Executando a Operação Desejada: Agora, vamos permitir que o usuário escolha a operação que deseja realizar. Vamos criar um pequeno menu onde o usuário poderá escolher entre depositar ou sacar dinheiro. E então, solicitar os valores necessários para realizar a operação. Vamos também atualizar o extrato para mostrar as informações corretas:

    # Após criar as instâncias das contas, podemos criar um menu simples
    print("Escolha uma operação:")
    print("1 - Extrato")
    print("2 - Depósito")
    print("3 - Saque")
    
    opcao = int(input("Digite o número da operação desejada: "))
    
    if opcao == 1:
        conta1.extrato()
    elif opcao == 2:
        valor_deposito = int(input("Digite o valor a ser depositado: "))
        conta1.deposito(valor_deposito)
    elif opcao == 3:
        valor_saque = int(input("Digite o valor a ser sacado: "))
        conta1.saque(valor_saque)
    else:
        print("Opção inválida.")
    
  4. Transferência Entre Contas (Extra): Você mencionou que também gostaria de implementar a transferência entre contas, então vamos fazer isso como um extra. Vamos criar uma função na classe Conta para realizar a transferência:

    class Conta:
        # ... (restante do código)
    
        def transferencia(self, valor, conta_destino):
            if self.__saldo >= valor:
                self.__saldo -= valor
                conta_destino.deposito(valor)
                print("Transferência realizada com sucesso!")
            else:
                print("Saldo insuficiente para a transferência.")
    

    E, para realizar a transferência, vamos adicionar essa opção ao menu e permitir que o usuário informe a conta de destino:

    # Após criar as instâncias das contas, podemos criar um menu simples
    print("Escolha uma operação:")
    print("1 - Extrato")
    print("2 - Depósito")
    print("3 - Saque")
    print("4 - Transferência")
    
    opcao = int(input("Digite o número da operação desejada: "))
    
    if opcao == 1:
        conta1.extrato()
    elif opcao == 2:
        valor_deposito = int(input("Digite o valor a ser depositado: "))
        conta1.deposito(valor_deposito)
    elif opcao == 3:
        valor_saque = int(input("Digite o valor a ser sacado: "))
        conta1.saque(valor_saque)
    elif opcao == 4:
        valor_transferencia = int(input("Digite o valor a ser transferido: "))
        conta_destino = int(input("Digite o número da conta de destino: "))
        # Aqui, você precisará localizar a conta de destino com base no número da conta informado
        # Suponha que você tenha uma lista de contas chamada 'contas' que armazena todas as contas
        conta_destino = next((c for c in contas if c.__numero == conta_destino), None)
        if conta_destino:
            conta1.transferencia(valor_transferencia, conta_destino)
        else:
            print("Conta de destino não encontrada.")
    else:
        print("Opção inválida.")
    

Lembre-se de que essa é apenas uma implementação básica para fins educacionais. Em aplicações reais, é necessário considerar validações adicionais e tratamento de erros.

Espero que tenha te ajudado! Se surgirem mais dúvidas, fique à vontade para perguntar.

Abraços e bons estudos!

Oi Renan,

Muito obrigado por responder de forma tão rica e completa. Nos últimos dias acabei seguindo meu plano de estudos, por isso acabei demorando pra responder aqui.

Não segui todas as suas ideias, mas certamente vou usar como base de pesquisa.

Seguindo suas recomendações, as minha implementação ficou mais simples, mas deu certo. Fica como referência para quem quiser usar:

#importo o método 

from conta import  Conta

#gero as entradas manuais e atribuo as variáveis

numero_conta = int(input("Digite o numero da conta:"))
nome_titular = str(input("Digite o titular da conta:"))

#atribuo as variáveis das entradas manuais na classe
conta1 = Conta(numero_conta, nome_titular, 500, 20000)

#gero as saídas para as opções do menu
print("Digite 1 para saldo")
print("Digite 2 para deposito")
print("Digite 3 para saque")
print("Digite 4 para transferência")

#capturo a entrada do usuário
opcao = int(input("Digite a opção desejada:"))

#testo as opções a partir da entrada do usuário para poder executar a operação desejada
#para cada opção desejada, acesso a def responsável pela operação escolhida

if opcao == 1:
    print(conta1.extrato())

if opcao == 2:
    deposito = int(input("Digite o valor a ser depositado:"))
    conta1.deposito(deposito)

if opcao == 3:
    saque = int(input("Digite o valor para retirada:"))
    conta1.saque(saque)

if opcao == 4:
    valor = int(input("Digite o valor a ser transferido"))
    numconta_dep = int(input("Digite o numero conta de deposito:"))
    conta1.saque(valor)

#somente para poder rodar o código, deixei pré-definidas algumas contas para realizar as transações de transferência. sabemos que no mundo real não é assim, mas serve como aprendizado. 

    if numconta_dep == 456:
        conta_2 = Conta(456, "jose", 800, 4000)
        conta1.transfere(valor, conta1, conta_2)
    if numconta_dep == 789:
        conta_2 = Conta(789,"joao", 400, 3000)
        conta1.transfere(valor, conta1, conta_2)

from conta import  Conta

#crio as entradas manuais de conta e nome

E minha classe ficou assim:

class Conta:

    def __init__(self, numero_conta, nome_titular, saldo_conta, limite_conta):
        self.__numero = numero_conta
        self.__titular = nome_titular
        self.__saldo = saldo_conta
        self.__limite = limite_conta
        self.__codigo_banco = "001"

    def extrato(self):
            print("Olá {}, o seu saldo é R${}" .format(self.__titular, self.__saldo))

    def  deposito(self, deposito):
        self.__saldo = deposito + self.__saldo
        #print("{}, o seu novo saldo é de R${}".format(self.__titular, self.__saldo))


    def __pode_sacar(self, valor_sacar):
        valor_sacar_max = self.__saldo + self.__limite
        return valor_sacar <= valor_sacar_max

    def  saque(self, saque):
        if (self.__pode_sacar(saque)):
            self.__saldo = self.__saldo - saque
            print("O saldo atual é de: {}" .format(self.__saldo))
        else:
            print("O saque excede o limite do saldo permitido")
        #print("{}, o seu novo saldo é de R${}".format(self.__titular, self.__saldo))

    def transfere(self, valor, conta_a, conta_b):
        conta_a.saque(valor)
        conta_b.deposito(valor)
        print("O seu novo saldo é de {}" .format(conta_b.extrato()))

    @staticmethod
    def codigo_banco():
        return "Código banco: 001"


    @staticmethod
    def codigo_bancos():
        codigo_bancos = {"BB":"001", "Caixa":"104", "Bradesco":"237"}
        return codigo_bancos


    @property
    def saldo(self):
        return self.__saldo

    @property
    def get_titular(self):
        return self.__titular.title()

    def get_limite(self):
        return self.__limite

Espero que tenha ajudado :)

Olá Rafael! Tudo ok por aí?

Fico contente em ver seu interesse em aprimorar suas habilidades em programação Python e em particular na implementação de classes e interação com o usuário.

Eu fico feliz que pude lhe ajudar a entender melhor o que fazer.

Seu código ficou muito legal, eu gostei muito do resultado, siga com o bom trabalho e fico ansioso para ver seu desenvolvimento.

Abraços e boa sorte em sua jornada de estudos.