Luis Ramos
Luis Ramos29/08/2024 20:32
Compartilhe

2° Desafio de projeto: Otimizando o Sistema Bancário com Funções Python - Explicação Passo a Passo

  • #Python

Este artigo detalha a criação do sistema bancário simples em Python que utilizei no desafio 2 no bootcamp NTT DATA - Engenharia de Dados com Python. Se você é iniciante na programação, esta explicação irá guiá-lo por cada etapa do código, mostrando como as funções e estruturas de controle trabalham juntas para criar um programa funcional.

Introdução

O objetivo do código é simular operações bancárias básicas, como depósitos, saques, exibição de extratos, e a criação de novas contas e usuários. O sistema é interativo, pedindo ao usuário que escolha a operação desejada através de um menu.

Estrutura do Código

O código é dividido em várias funções, cada uma responsável por uma tarefa específica no sistema. Vamos entender cada uma dessas funções e como elas se conectam para formar o sistema completo.

1. A Função menu()

```python

import textwrap

def menu():

    menu = """

    ----------------- MENU ------------------

    [d] Depositar

    [s] Sacar

    [e] Extrato

    [nc] Nova Conta

    [lc] Lista Contas

    [nu] Novo Usuário

    [q] Sair

    => """

    return input(textwrap.dedent(menu))

```

A função menu() exibe um conjunto de opções que o usuário pode escolher para realizar uma operação no sistema. A função usa textwrap.dedent() para remover qualquer indentação desnecessária, garantindo que o menu seja exibido corretamente na tela.

- Entrada: Não recebe nenhuma entrada específica.

- Saída: Retorna a escolha do usuário, que será usada para determinar a próxima ação.

2. A Função depositar()

```python

def depositar(saldo, valor, extrato, /):

    if valor > 0:

        saldo += valor

        extrato += f"Depósito: R$ {valor:.2f}\n"

        print("\n Depósito Realizado. ")

    else:

        print("\n Operação Inválida. ")

    return saldo, extrato

```

A função depositar() é responsável por adicionar um valor ao saldo da conta do usuário. Ela verifica se o valor do depósito é positivo e, em caso afirmativo, atualiza o saldo e o extrato.

- Entrada: saldo (saldo atual), valor (quantia a ser depositada), extrato (histórico de transações).

- Saída: Retorna o saldo atualizado e o extrato com a nova transação registrada.

3. A Função sacar()

```python

def sacar(*, saldo, valor, extrato, limite, num_saques, limite_saques):

    sem_saldo = valor > saldo

    sem_limite = valor > limite

    sem_saque = num_saques >= limite_saques

    if sem_saldo:

        print("\n Saldo Insuficiente. ")

    elif sem_limite:

        print("\n Sem Limite. ")

    elif sem_saque:

        print("\n Número de Saques Excedido. ")

    elif valor > 0:

        saldo -= valor

        extrato += f"Saque: R$ {valor:.2f}\n"

        num_saques += 1

        print("\n Saque Realizado ")

    else:

        print("\n Operação Inválida ")

    return saldo, extrato

```

A função sacar() permite ao usuário retirar dinheiro da conta, mas com algumas verificações importantes: se há saldo suficiente, se o valor do saque não excede o limite, e se o número de saques permitidos não foi ultrapassado.

- Entrada: saldo, valor, extrato, limite (valor máximo permitido por saque), num_saques (número de saques realizados), limite_saques (número máximo de saques permitidos).

- Saída: Retorna o saldo e o extrato atualizados após o saque.

4. A Função exibir_extrato()

```python

def exibir_extrato(saldo, *, extrato):

    print("\n------------------------ EXTRATO ----------------------")

    print("Não Foram Realizadas Movimentações." if not extrato else extrato)

    print(f"\n Saldo: R$ {saldo:.2f}")

    print("---------------------------------------------------------")

```

A função exibir_extrato() mostra todas as transações realizadas na conta e o saldo atual. Se não houver transações, uma mensagem informando que nenhuma movimentação foi realizada é exibida.

- Entrada: saldo, extrato.

- Saída: Exibe o extrato e o saldo na tela.

5. A Função novo_usuario()

```python

def novo_usuario(usuarios):

    cpf = input("CPF (22222222222): ")

    usuario = filtrar_usuario(cpf, usuarios)

    if usuario:

        print("\n Usuário já cadastrado ")

        return

    

    nome = input("Nome Completo: ")

    data_nascimento = input("Digite a data de nascimento: (dd-mm-aaaa): ")

    endereco = input("Digite o Endereco")

    bairro = input("Digite o Bairro: ")

    cidade = input("Digite a Cidade: ")

    uf = input("Digite o Estado: ")

    usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco, "bairro": bairro, "cidade": cidade, "estado": uf})

    print("\n Usuário Cadastrado com Sucesso ")

```

A função novo_usuario() permite que novos usuários sejam cadastrados no sistema. Ela coleta informações como CPF, nome, data de nascimento e endereço.

- Entrada: usuarios (lista de usuários já cadastrados).

- Saída: Atualiza a lista de usuários com o novo registro.

6. A Função filtrar_usuario()

```python

def filtrar_usuario(cpf, usuarios):

    usuarios_filtrados = [usuario for usuario in usuarios if usuario['cpf'] == cpf]

    return usuarios_filtrados[0] if usuarios_filtrados else None

```

A função filtrar_usuario() busca um usuário na lista de usuários com base no CPF fornecido. Se o usuário existir, ele é retornado.

- Entrada: cpf, usuarios.

- Saída: Retorna o usuário encontrado ou None se o usuário não existir.

7. A Função criar_conta()

```python

def criar_conta(agencia, numero_conta, usuarios):

    cpf = input("CPF: ")

    usuario = filtrar_usuario(cpf, usuarios)

    

    if usuario:

        print("\n Conta criada com sucesso! ")

        return {"agencia": agencia, "num_conta": numero_conta, "usuario": usuario}

    print("\n Usuário não encontrado. ")

```

A função criar_conta() cria uma nova conta associada a um usuário existente. Cada conta tem um número único e está vinculada ao usuário através do CPF.

- Entrada: agencia, numero_conta, usuarios.

- Saída: Retorna um dicionário com as informações da nova conta, ou None se o usuário não for encontrado.

8. A Função list_contas()

```python

def list_contas(contas):

    for conta in contas:

        linha = f"""

                    Agência: {conta['agencia']}

                    Conta: {conta['num_conta']}

                    Titular: {conta['usuario']['nome']}

        """

        print("=" * 100)

        print(textwrap.dedent(linha))

```

A função list_contas() exibe todas as contas existentes no sistema, mostrando detalhes como a agência, número da conta e nome do titular.

- Entrada: contas.

- Saída: Exibe as informações de cada conta na tela.

9. A Função Principal main()

```python

def main():

    LIM_SAQUES = 3

    AGENCIA = "0001"

    saldo = 0

    limite = 500

    extrato = ""

    num_saques = 0

    usuarios = []

    contas = []

    while True:

        opcao = menu()

        if opcao == "d":

            valor = float(input("Informe o valor do depósito: "))

            saldo, extrato = depositar(saldo, valor, extrato)

        elif opcao == "s":

            valor = float(input("Informe o valor do saque: "))

            saldo, extrato = sacar(

                saldo=saldo,

                valor=valor,

                extrato=extrato,

                limite=limite,

                num_saques=num_saques,

                limite_saques=LIM_SAQUES,

            )

        elif opcao == "e":

            exibir_extrato(saldo, extrato=extrato)

        elif opcao == "nu":

            novo_usuario(usuarios)

        elif opcao == "nc":

            numero_conta = len(contas) + 1

            conta = criar_conta(AGENCIA, numero_conta, usuarios)

            if conta:

                contas.append(conta)

        elif opcao == "lc":

            list_contas(contas)

        elif opcao == "q":

            break

        else:

            print("Operação inválida.")

```

A função main() é o núcleo do programa. Ela define variáveis importantes, como o limite de saques e o saldo inicial, e controla o fluxo do programa

 através de um loop while True. A cada iteração, o programa exibe o menu e executa a função correspondente à escolha do usuário.

- Entrada: Nenhuma entrada externa direta, mas depende das escolhas do usuário no menu.

- Saída: Controla todo o fluxo do programa.

Conclusão

Este código, apesar de simples, oferece uma base sólida para entender conceitos importantes de programação como funções, controle de fluxo, e manipulação de listas e strings em Python. Com o entendimento deste código, pude expandir minhas habilidades e criar programas ainda mais complexos e úteis.

Compartilhe
Comentários (1)

WB

William Bezerra - 29/08/2024 22:24

Show de bola... Muito bem explicado...