Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update desafio.py #230

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
57 changes: 34 additions & 23 deletions 01 - Estrutura de dados/desafio.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import textwrap


def menu():
menu = """\n
================ MENU ================
Expand All @@ -10,55 +9,58 @@ def menu():
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[hs]\tHistórico de saques
[q]\tSair
=> """
return input(textwrap.dedent(menu))


def depositar(saldo, valor, extrato, /):
def obter_valor(mensagem):
while True:
try:
valor = float(input(mensagem))
if valor <= 0:
raise ValueError
return valor
except ValueError:
print("Valor inválido! Por favor, insira um número positivo.")

def depositar(saldo, valor, extrato):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")

return saldo, extrato


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

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

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

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

elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
saques.append(valor) # Armazenar o valor do saque
print("\n=== Saque realizado com sucesso! ===")

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

return saldo, extrato

return saldo, extrato, numero_saques, saques

def exibir_extrato(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:\t\tR$ {saldo:.2f}")
print("==========================================")


def criar_usuario(usuarios):
cpf = input("Informe o CPF (somente número): ")
usuario = filtrar_usuario(cpf, usuarios)
Expand All @@ -72,15 +74,12 @@ def criar_usuario(usuarios):
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)
Expand All @@ -103,6 +102,15 @@ def listar_contas(contas):
print(textwrap.dedent(linha))


def exibir_historico_saques(saques):
print("\n================ HISTÓRICO DE SAQUES ================")
if not saques:
print("Nenhum saque realizado.")
else:
for i, valor in enumerate(saques, start=1):
print(f"Saque {i}: R$ {valor:.2f}")
print("======================================================")

def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
Expand All @@ -111,32 +119,35 @@ def main():
limite = 500
extrato = ""
numero_saques = 0
saques = [] # Histórico de saques
usuarios = []
contas = []

while True:
opcao = menu()

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

valor = obter_valor("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(
valor = obter_valor("Informe o valor do saque: ")
saldo, extrato, numero_saques, saques = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
saques=saques,
)

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

elif opcao == "hs":
exibir_historico_saques(saques)

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

Expand All @@ -156,5 +167,5 @@ def main():
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")


main()