Agenda de cadastros com tratamento de erros
Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)
[ Hits: 5.989 ]
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'
Checagem e remoção de arquivos
Serialização em Python usando pickle
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (20)
Alguém pode me ajudar porfavor como executar comandos ao iniciar no i3... (1)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba