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
181 changes: 135 additions & 46 deletions 00 - Fundamentos/desafio.py
Original file line number Diff line number Diff line change
@@ -1,66 +1,155 @@
menu = """
def depositar(saldo, valor, extrato, /):
if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
print("\nDepósito realizado com sucesso!")
else:
print("\nOperação falhou! Valor inválido para depósito.")
return saldo, extrato


def sacar(*, saldo, valor, extrato, numero_saques, limite, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques

if excedeu_saldo:
print("\nOperação falhou! Saldo insuficiente.")
elif excedeu_limite:
print("\nOperação falhou! O valor do saque excede o limite permitido.")
elif excedeu_saques:
print("\nOperação falhou! Número máximo de saques atingido.")
elif valor > 0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1
print("\nSaque realizado com sucesso!")
else:
print("\nOperação falhou! Valor inválido.")

[d] Depositar
[s] Sacar
[e] Extrato
[q] Sair
return saldo, extrato, numero_saques

=> """

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

while True:

opcao = input(menu)
def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente números): ")

if opcao == "d":
valor = float(input("Informe o valor do depósito: "))
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\nJá existe um usuário com esse CPF!")
return

if valor > 0:
saldo += valor
extrato += f"Depósito: R$ {valor:.2f}\n"
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nº - bairro - cidade/sigla estado): ")

else:
print("Operação falhou! O valor informado é inválido.")
usuarios.append({
"nome": nome,
"data_nascimento": data_nascimento,
"cpf": cpf,
"endereco": endereco
})
print("\nUsuário cadastrado com sucesso!")

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

excedeu_saldo = valor > saldo
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [u for u in usuarios if u["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None

excedeu_limite = valor > limite

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

if excedeu_saldo:
print("Operação falhou! Você não tem saldo suficiente.")
if usuario:
print("\nConta criada com sucesso!")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
else:
print("\nUsuário não encontrado. Criação de conta encerrada.")

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.")
def listar_contas(contas):
if not contas:
print("\nNenhuma conta cadastrada.")
return

elif valor > 0:
saldo -= valor
extrato += f"Saque: R$ {valor:.2f}\n"
numero_saques += 1
for conta in contas:
linha = f"""\
Agência: {conta['agencia']}
C/C: {conta['numero_conta']}
Titular: {conta['usuario']['nome']}
"""
print("=" * 40)
print(linha)

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("==========================================")
def main():
menu = """
=============== MENU ===============
[d] Depositar
[s] Sacar
[e] Extrato
[nu] Novo usuário
[nc] Nova conta
[lc] Listar contas
[q] Sair
=> """

elif opcao == "q":
break
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
LIMITE_SAQUES = 3
AGENCIA = "0001"

usuarios = []
contas = []

while True:
opcao = input(menu)

if opcao == "d":
valor = float(input("Valor do depósito: "))
saldo, extrato = depositar(saldo, valor, extrato)

elif opcao == "s":
valor = float(input("Valor do saque: "))
saldo, extrato, numero_saques = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
numero_saques=numero_saques,
limite=limite,
limite_saques=LIMITE_SAQUES
)

elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)

elif opcao == "nu":
criar_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":
listar_contas(contas)

elif opcao == "q":
print("\nSaindo do sistema. Até logo!")
break

else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
else:
print("\nOperação inválida. Tente novamente.")


main()