This repository was archived by the owner on Jun 12, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControleListaTelefonica.py
More file actions
209 lines (171 loc) · 5.13 KB
/
Copy pathControleListaTelefonica.py
File metadata and controls
209 lines (171 loc) · 5.13 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
agenda = []
agenda2 = []
alterada = False
def pede_nome(default=''):
name = input('Nome: ')
if name == '':
name = default
return name
def pede_telefone(default=''):
telephone = input('Telefone: ')
if telephone == '':
telephone = default
return telephone
def pede_nascimento():
nascimento = input('Data de nascimento: ')
return nascimento
def pede_email():
email = input('E-Mail: ')
return email
def pede_nome_arquivo():
return input('Nome do arquivo: ')
def mostra_dados(nome, telefone, nascimento, email):
print(f'Nome: {nome.capitalize():<12} - Telefone: {telefone:<14} - Nascimento: {nascimento:<12} - Email: {email}')
def pesquisa(nome):
mnome = nome.lower()
for p, e in enumerate(agenda):
if e[0].lower() == mnome:
return p
return None
def novo():
global agenda, alterada
nome = pede_nome()
if pesquisa(nome) is not None:
return print(f'Erro. {nome} já está cadastrado na agenda')
telefone = pede_telefone()
nascimento = pede_nascimento()
email = pede_email()
agenda.append([nome, telefone, nascimento, email])
alterada = True
def confirma(operacao):
while True:
opcao = str(input(f'Confirma - {operacao}?(S/N): ')).upper()
if opcao in 'SN':
return opcao
else:
print('Resposta Inválida, digite S ou N')
def ultima_agenda():
global option, agenda2
if option != 8:
with open('ultima.txt', 'w', encoding='utf-8') as ultimo:
for e in agenda:
ultimo.write(f'{e[0]}#{e[1]}#{e[2]}#{e[3]}\n')
else:
with open('ultima.txt', 'r', encoding='utf-8') as ultima:
agenda2 = []
for line in ultima.readlines():
nome, telefone, nascimento, email = line.strip().split('#')
agenda2.append([nome, telefone, nascimento, email])
lista(agenda2)
def apaga():
global agenda, alterada
nome = pede_nome()
p = pesquisa(nome)
if p is not None:
if confirma("apagamento") == 'S':
del agenda[p]
alterada = True
else:
print('Nome não encontrado!')
def altera():
global alterada
p = pesquisa(pede_nome())
if p is not None:
nome = agenda[p][0]
telefone = agenda[p][1]
nascimento = agenda[p][2]
email = agenda[p][3]
print('Encontrado: ')
mostra_dados(nome, telefone, nascimento, email)
nome = pede_nome()
telefone = pede_telefone()
if confirma("alteraração") == 'S':
agenda[p] = [nome, telefone, nascimento, email]
alterada = True
else:
print('Nome não encontrado')
def lista(arquivo=None):
if arquivo is None:
arquivo = agenda
print("\nAgenda\n--------")
for posicao, e in enumerate(arquivo):
print(f'Nº 0{posicao + 1} = ', end='')
mostra_dados(e[0], e[1], e[2], e[3])
print("-" * 15)
def leitura():
global agenda, alterada
if alterada:
print("Você não salvou a lista desde a última alteração. Deseja gravá-la agora?")
if confirma('gravação') == 'S':
grava()
nome_arquivo = pede_nome_arquivo()
try:
with open(nome_arquivo, "r", encoding="utf-8") as arquivo:
agenda = []
for l in arquivo.readlines():
nome, telefone, nascimento, email = l.strip().split('#')
agenda.append([nome, telefone, nascimento, email])
except FileNotFoundError:
print('Arquivo não existe!')
ultima_agenda()
alterada = False
def ordenar():
global alterada
agenda.sort(key=lambda e: e[0])
alterada = True
def grava():
global alterada
if not alterada:
print('Você não alterou a lista. Deseja gravá-la mesmo assim?')
if confirma('Gravação') == 'N':
return
print('Gravar\n------------')
nome_arquivo = pede_nome_arquivo()
with open(nome_arquivo, "w", encoding="utf-8") as arquivo:
for e in agenda:
arquivo.write(f'{e[0]}#{e[1]}#{e[2]}#{e[3]}\n')
ultima_agenda()
def valida_faixa_inteiro(pergunta, min, max):
while True:
try:
op = int(input(pergunta))
if min <= op <= max:
return op
except ValueError:
print(f'Valor Inválido, digite um valor entre {min} e {max}')
def menu():
print("""\nControle de agendas de telefone\n
1 - Novo
2 - Altera
3 - Apaga
4 - Lista
5 - Grava
6 - Lê
7 - Ordernar por nome
8 - Ultima lista
0 - Sair
""")
alt = 'Sim' if alterada else 'Não'
print(f'Nomes na agenda: {len(agenda)} - Alterada: {alt}')
print('-' * 17)
return valida_faixa_inteiro("Escolha uma opção: ", 0, 8)
while True:
option = menu()
if option == 0:
break
elif option == 1:
novo()
elif option == 2:
altera()
elif option == 3:
apaga()
elif option == 4:
lista()
elif option == 5:
grava()
elif option == 6:
leitura()
elif option == 7:
ordenar()
elif option == 8:
ultima_agenda()