Skip to content

Resolução Desafio Bancario #438

@Fred2753

Description

@Fred2753

#My_desafio

import textwrap

def menu():

menu = """\n

====================== Menu ======================\n

\t[1] Depositar
\t[2] Sacar
\t[3] Extrato
\t[4] Consultar Usuáiro
\t[5] Cadastrar Usuário
\t[6] Consultar Conta
\t[7] Cadastrar Conta


\t[0] Sair

==================================================

=> """

return input(textwrap.dedent(menu)) 

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

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

if valor > 0:
    saldo += valor
    extrato += f"Depósito: R$ {valor:.2f}\n"
    print(f"Deposito realizado com sucesso no valor: R$ ", valor)

else:    
    print("\n@@@ Operação falhou! O valor informado é inválido. @@@")

return saldo, extrato

def saque(*, saldo, valor, extrato, limite, numero_saques, LIMITE_SAQUES):

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

excedeu_saldo = valor > saldo

excedeu_limite = valor > limite

excedeu_saques = numero_saques >= LIMITE_SAQUES

if excedeu_saldo:
        print("Operação falhou! Você não tem saldo suficiente.")

elif excedeu_limite:
        print("Operação falhou! O valor do saque excede o limite.")

elif excedeu_saques:
        print("Operação falhou! Número máximo de saques excedido.")

elif valor > 0:
        saldo -= valor
        extrato += f"Saque: R$ {valor:.2f}\n"
        numero_saques += 1
        print("\n=== Saque realizado com sucesso! ===")
        

else:
        print("Operação falhou! O valor informado é inválido.")


return saldo, extrato, numero_saques

def exibir_extrato(saldo, /, *, extrato):
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo: R$ {saldo:.2f}")
print("==========================================")

def localizarCPF(cpf, usuarios):
pesquisar_usuario = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return pesquisar_usuario[0] if pesquisar_usuario else None

def cadastroUsuario(usuarios):

cpf = input("Informe o CPF (Somente números): ")

if len(cpf) != 2:
    print("Digitar novamente o CPF.")
else:
    usuario = localizarCPF(cpf, usuarios)

    if usuario:
        print("\n@@@ Já existe usuário cadastrado com esse CPF! @@@")
    nome_completo = input("Informe o nome completo: ")
    #data_nascimento = input("Informe a data de nascimento (dd--mm--aaaa): ")
    #endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/uf): ")

    #usuarios.append({"nome": nome_completo, "data_nascimento": data_nascimento, "cpf": cpf, "endereço": endereco})
    usuarios.append({"nome": nome_completo, "cpf": cpf})

    print("====== Usuário criado com sucesso! ======")

def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = localizarCPF(cpf, usuarios)

if usuario:
    print("\n=== Conta criada com sucesso! ===")
    return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}

print("\n=== Usuário não encontrado, fluxo de criação de conta encerrado! @@@")

def listar_contas(contas):
for conta in contas:
linha = f"""
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
CPF_Titular:\t{conta['usuario']['cpf']}
"""
print("=" * 100)
print(textwrap.dedent(linha))

def consulta_usuario(usuarios, contas):
cpf = input("Informe o CPF do usuário:")
usuario = localizarCPF(cpf, usuarios=usuarios)

lista_clientes = f"""\
    Nome:\t{usuario['nome']}
    CPF:\t{usuario['cpf']}

"""
print("=" * 40 + " Cliente Cadastrado " + "=" * 40)
print(textwrap.dedent(lista_clientes))
    

for conta in contas:
    
        linha = f"""\
            Agência:\t{conta['agencia']}
            C/C:\t\t{conta['numero_conta']}
        """

        if conta['usuario']['cpf'] == usuario['cpf']:
            
            print(textwrap.dedent(linha)) 

print("=" * 100)

def main():

LIMITE_SAQUES = 3
AGENCIA = '0001'

saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []

while True:

    opcao = menu()

    match opcao:
       
        case "1": 
            #depositar
            
            valor = float(input("Informe o valor do deposito: "))
            saldo, extrato = deposito(valor, saldo, extrato)

        case "2":
            #saque
            valor = float(input("Informe o valor do saque: "))
            saldo, extrato, numero_saques = saque(
                  saldo=saldo,
                  valor=valor,
                  extrato=extrato,
                  limite=limite,
                  numero_saques=numero_saques,
                  LIMITE_SAQUES=LIMITE_SAQUES
               )
                       
        case "3":
            #extrato
            exibir_extrato(saldo, extrato=extrato)

        case "4":
            consulta_usuario(usuarios, contas=contas)    
        
        case "5":
            #cadastro de usuários
            cadastroUsuario(usuarios)

        case "6":
            #
            listar_contas(contas)    

        case "7":
            #cadastrar conta
            numero_conta = len(contas) + 1
            conta = criar_conta(AGENCIA, numero_conta, usuarios)

            
            if conta:
                contas.append(conta)
                  
        case "0":
           break

main()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions