Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 82 additions & 9 deletions 00 - Fundamentos/desafio.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import textwrap
menu = """

[d] Depositar
[s] Sacar
[e] Extrato
[c] Nova conta
[u] Novo usuário
[l] Listar contas
[q] Sair

=> """
Expand All @@ -11,7 +15,69 @@
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
LIMITE_SAQUES = 3
AGENCIA = '001'

def deposito(saldo, valor, extrato, /):
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"

return saldo, extrato

def saque(*, saldo, valor, extrato, numero_saques, limite_saques):
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1

return saldo, extrato

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 criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)

if usuario:
print("\nJá existe usuário com esse CPF!")
return

nome = 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/sigla estado): ")

usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})

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

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

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

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

print("\nUsuá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']}
"""
print("=" * 100)
print(textwrap.dedent(linha))

while True:

Expand All @@ -21,8 +87,7 @@
valor = float(input("Informe o valor do depósito: "))

if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
saldo, extrato = deposito(saldo, valor, extrato)

else:
print("Operação falhou! O valor informado é inválido.")
Expand All @@ -46,18 +111,26 @@
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
saldo, extrato = saque(saldo=saldo, valor=valor, extrato=extrato, numero_saques=numero_saques, limite_saques=LIMITE_SAQUES)

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

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

elif opcao == "u":
criar_usuario(usuarios)

elif opcao == "c":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)

if conta:
contas.append(conta)

elif opcao == "lc":
listar_contas(contas)

elif opcao == "q":
break
Expand Down