Agenda de cadastros com tratamento de erros
Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)
[ Hits: 6.132 ]
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'
Pyconv - Conversor de codificação de caracteres
Converte valor de Bytes 2 Kbyte 2 Mbyte
Manipulação de arquivos CSV - OO
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta