forked from digitalinnovationone/trilha-python-dio
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdesafio 2.py
More file actions
176 lines (140 loc) · 5.77 KB
/
desafio 2.py
File metadata and controls
176 lines (140 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import textwrap
def menu():
menu = """
[1] Logar
[2] Depositar
[3] Sacar
[4] Extrato
[5] Novo Usuário
[6] Nova Conta
[7] Listar Contas
[0] Sair
=> """
return input(textwrap.dedent(menu))
def depositar(numero_conta, contas, saldo, valor, extrato, cpf_logado):
for conta in contas:
if conta["numero_conta"] == numero_conta:
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR${valor:.2f}\n"
if cpf_logado and conta["usuario"]["cpf"] == cpf_logado:
print(f"\nDepósito no valor de {valor:.2f} realizado com sucesso !\n Seu novo saldo é de: R${saldo:.2f}.")
else:
print(f"\nDepósito de R${valor:.2f} realizado com sucesso para a conta {numero_conta}!")
else:
print("\nA operação falhou! O valor informado não é permitido !")
return saldo, extrato
else:
print("Conta não encontrada !")
return saldo, extrato
def sacar(*, saldo, valor, extrato, limite, numero_saques, limite_saques):
excedeu_saldo = valor > saldo
excedeu_limite = valor > limite
excedeu_saques = numero_saques >= limite_saques
if excedeu_saldo:
print("\nSeu saldo é insuficiente para essa operação.")
elif excedeu_limite:
print("\nSeu limite é insuficiente para essa operação.")
elif excedeu_saques:
print("\nVocê excedeu a quantidades de saques diárias. Procure a agência mais próxima.")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
print("\nSAque realizado com sucesso!")
else:
print("\nA operação falhou! O valor informado não é permitido !")
return ()
def exibir_extrato(saldo, extrato):
print("\nEXTRATO")
print("\nSem movimentações até está data." if not extrato else extrato)
print(f"\nSaldo: R${saldo:.2f}")
def criar_usuario(usuarios):
cpf = input("Informe seu CPF (Digite apenas números): ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\nJá existe um usuário vinculado a esse CPF !")
return
nome = input("Informe o seu nome completo: ")
data_nascimento = input("Informe sua data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe seu endereço (logradouro, numero - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("Usuário cadastrado 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("\n Usuário não encontrado, faça o cadastro do usuário primeiro, para essa operação.\nCriação de conta encerrada !")
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))
def main():
cpf_logado = None
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "1":
cpf_logado = input("Por favor informe seu CPF: ")
usuario_logado = filtrar_usuario(cpf_logado, usuarios)
if usuario_logado:
print(f"\nOlá, {usuario_logado['nome']}! Você está logado.")
else:
print("\nUsuário não encontrado. Faça o cadastro primeiro.")
cpf_logado = None
elif opcao == "2":
if cpf_logado is None:
print("Faça primeiro o seu login se quiser retornar seu saldo após o deposito!")
numero_conta = int(input("Informe o numero da conta: "))
valor = float(input("Informe o valor do depósito: "))
saldo, extrato = depositar(numero_conta, contas, saldo, valor, extrato, cpf_logado)
elif opcao == "3":
valor = float(input("Informe o valor que deseja sacar: "))
saldo, extrato = sacar (
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
)
elif opcao == "4":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "5":
criar_usuario(usuarios)
elif opcao == "6":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "7":
if cpf_logado is None:
print("\nFaça o login primeiro para poder listar suas contas ativas!")
else:
contas_usuario = [conta for conta in contas if conta["usuario"]["cpf"] == cpf_logado]
if contas_usuario:
listar_contas(contas_usuario)
else:
print("\nNenhuma conta vinculada ao seu CPF foi encontrada.")
elif opcao == "0":
break
else:
print("Opção não disponível, por favor selecione uma das opções informadas.")
main()