Agenda de cadastros com tratamento de erros
Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)
[ Hits: 6.454 ]
Agenda simples que possui as funções básicas (adicionar, excluir, pesquisar e editar contatos), e tratamento de erros para evitar que o usuario quebre o código.
# Walsan Jadson de Lima
# Walsan_JL@hotmail.com
# Agenda para contato (celular e e-mail)
# definindo funcao para testar se o nome eh valido (tem nome e sobrenome)
def ehNome(nome):
if not ' ' in nome:
return False
if nome.index(' ') == 0:
return False
if nome.index(' ') == len(nome)-1:
return False
return True
assert not ehNome('walsan')
assert not ehNome('walsanjadson')
assert not ehNome(' walsan')
assert not ehNome('Walsan ')
assert not ehNome('123')
assert ehNome('123 345')
assert ehNome('walsan jadson')
# definindo funcao para testar se o email eh valido
def ehEmail(email):
if not '@' in email:
return False
if not '.' in email:
return False
# definindo as posicoes do '@' e do '.'
arroba = email.index('@')
ponto = email.index('.')
if ponto < arroba:
return False
if arroba == 0:
return False
# verificando a quantidade de caracteres do email
ultimo = len(email)-1
# verificando se existe alguma coisa depois do ponto
if ponto == ultimo:
return False
# verificando se existe alguma coisa entre '@' e o '.'
if ponto - arroba == 1:
return False
return True
assert not ehEmail('abc')
assert not ehEmail('abc@')
assert not ehEmail('abc@def')
assert not ehEmail('abc@def.')
assert not ehEmail('@def.com')
assert not ehEmail('abc.def@.')
assert not ehEmail('@def.')
assert not ehEmail('abc@.com')
assert ehEmail('a@b.c')
assert ehEmail('walsan@ufpb.com')
# definindo funcao para testar se o celular e valido
def ehCelular(celular):
if len(celular) != 8:
return False
if not celular.isdigit():
return False
return True
assert not ehCelular('1234567')
assert not ehCelular('123456a')
assert not ehCelular('1234567a')
assert ehCelular('12345678')
assert ehCelular('99228978')
# definindo uma funcao que adiciona um contato
def adicionaContato():
while 1:
nome= raw_input('\nDigite seu nome: ').upper()
if ehNome(nome) == True:
break
else:
print '\ndigite nome e sobrenome!!!\n'
while 1:
celular= raw_input('Digite o seu celular: ')
if ehCelular(celular) == True:
break
else:
print '\nnumero incorreto, digite novamente!!!\n'
while 1:
email= raw_input('Digite seu email: ')
if ehEmail(email) == True:
break
else:
print '\nemail invalido, digite novamente!!!\n'
contato= [nome, celular, email]
agenda.append(contato)
print '\nContato adicionado com sucesso.\n'
# definindo funcao para varrer a agenda e procurar um contato
def pesquisarContato():
if len(agenda) == 0:
print '\nSua agenda ainda nao possui contatos!!!\n'
else:
contador = 1
nome_do_contato= raw_input('Digite o nome do contato: ').upper()
for contato in agenda:
if nome_do_contato in contato[0]:
print '\n %i' %contador
print 'Nome: %s' %contato[0]
print 'Celular: %s' %contato[1]
print 'e-mail: %s \n' %contato[2]
contador += 1
if contador == 1:
print '\nContato inexistente.\n'
# definindo funcao para editar um contato
def editarContato(): # logoca dessa funcao eh substituir o que estah na agenda pelo que o usuario digitar
if len(agenda) == 0:
print '\nSua agenda ainda nao possui contatos!!!\n'
else:
nome= raw_input('Digite o nome do contato: ').upper()
contador2= 1
filtro= []
for contato in agenda:
if nome in contato[0]:
print '\n %i' %contador2
print 'Nome: %s' %contato[0]
print 'Celular: %s' %contato[1]
print 'e-mail: %s \n' %contato[2]
contador2 += 1
filtro.append(contato)
if len(filtro) > 0:
while 1:
try:
pergunta= int(raw_input('Digite o indice do contato a ser editado: '))
if pergunta > contador2 - 1:
print '\nnumero invalido!!!\n'
else:
break
except:
print '\ncaracter invalido!!!\n'
contato_editar= (filtro[pergunta-1])
endereco= agenda.index(contato_editar)
while 1:
novo_nome= raw_input('Nome: %s --> ' %contato_editar[0]).upper()
if novo_nome == '': # se o usuario teclar ENTER o nome nao muda
agenda[endereco][0]= contato_editar[0]
break
else:
if ehNome(novo_nome) == True:
agenda[endereco][0]= novo_nome
break
else:
print '\nDigite nome e sobrenome!\n'
while 1:
novo_celular= raw_input('Celular: %s --> ' %contato_editar[1])
if novo_celular == '': # se o usuario teclar ENTER o celular nao muda
agenda[endereco][1]= contato_editar[1]
break
else:
if ehCelular(novo_celular) == True:
agenda[endereco][1]= novo_celular
break
else:
print '\nCelular invalido, digite novamente!\n'
while 1:
novo_email= raw_input('email: %s --> ' %contato_editar[2])
if novo_email == '': # se o usuario teclar ENTER o e-mail nao muda
agenda[endereco][2]= contato_editar[2]
break
else:
if ehEmail(novo_email) == True:
agenda[endereco][2]= novo_email
break
else:
print '\nE-mail invalido, digite novamente!\n'
print '\nContato editado com sucesso.\n'
else:
print '\nContato inexistente.\n'
# definindo funcao para excluir contato
def excluirContato():
if len(agenda) == 0:
print '\nSua agenda ainda nao possui contatos!!!\n'
else:
nome= raw_input('Digite o nome do contato: ').upper()
contador2= 1
filtro= []
for contato in agenda:
if nome in contato[0]:
print '\n %i' %contador2
print 'Nome: %s' %contato[0]
print 'Celular: %s' %contato[1]
print 'e-mail: %s \n' %contato[2]
contador2 += 1
filtro.append(contato)
if len(filtro) > 0:
while 1:
try:
pergunta= int(raw_input('Digite o indice do contato a ser excluido: '))
if pergunta > contador2 - 1:
print '\nnumero invalido!!!\n'
else:
break
except:
print '\ncaracter invalido!!!\n'
agenda.remove(filtro[pergunta-1])
print '\nContato excluido com sucesso.\n'
else:
print '\nContato inexistente.\n'
# definindo funcao que mostra todos os contatos da agenda
def tudo():
if len(agenda) == 0:
print '\nSua agenda ainda nao possui contatos!!!\n'
else:
contador3= 1
for contato in agenda:
print '\n %i' %contador3
print 'Nome: %s' %contato[0]
print 'Celular: %s' %contato[1]
print 'e-mail: %s \n' %contato[2]
contador3 += 1
# definindo uma funcao para salvar a agenda em um documento .txt
def salva():
abertura= open('agenda_lista.txt','w')
for contato in agenda:
abertura.write('%s%s' %(contato[0],delimitador))
abertura.write('%s%s' %(contato[1],delimitador))
abertura.write('%s\n' %contato[2]) #nao se coloca o delimitador, pq na leitura seria criado um elemento assim --> ['']
abertura.close()
# definindo funcao para recuperas todos os contatos do arquivo .txt
def ler():
abertura= open('agenda_lista.txt','r')
ls= abertura.read().splitlines()
# ls me eh uma lista, sendo que cada elemento eh uma linha do arquivo
for contato in ls:
novo_contato= contato.split(delimitador)
#novo_contato eh uma lista, sendo que aqui pegamos o elemento de ls e quebramos no delimitaddor
agenda.append(novo_contato)
# programa
import time
delimitador= '++'
agenda= []
# quando o programa inicia, ele tenta ler o arquivo .txt, mais se nao exeistir ainda um arquivo .txt
# ele cria um em branco para poder ser usado no fim do programa
try:
ler()
except:
abertura= open('agenda.txt','w')
abertura.close()
print ' \nOpcoes: '
print ' - (m) menu'
print ' - (a) adicionar'
print ' - (p) pesquisar'
print ' - (ed) editar'
print ' - (ex) excluir'
print ' - (t) tudo'
print ' - (s) sair\n'
while 1:
comando= raw_input('o que deseja fazer? ').upper()
if comando == 'a'.upper():
adicionaContato()
elif comando == 'p'.upper():
pesquisarContato()
elif comando == 'ed'.upper():
editarContato()
elif comando == 'ex'.upper():
excluirContato()
elif comando == 't'.upper():
tudo()
elif comando == 's'.upper():
print '\n Saindo... \n'
salva()
time.sleep(1.0)
break
elif comando == 'm'.upper():
print '\n Opcoes: '
print ' - (m) menu'
print ' - (a) adicionar'
print ' - (p) pesquisar'
print ' - (ed) editar'
print ' - (ex) excluir'
print ' - (t) tudo'
print ' - (s) sair\n'
else:
print '\n Opcoes: '
print ' - (m) menu'
print ' - (a) adicionar'
print ' - (p) pesquisar'
print ' - (ed) editar'
print ' - (ex) excluir'
print ' - (t) tudo'
print ' - (s) sair\n'
Organizando suas músicas com Python
Mini-dicionário de termos em Python e PyQT 4
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









