Agenda de cadastros com tratamento de erros
Publicado por Walsan Jadson de Lima (última atualização em 03/07/2011)
[ Hits: 6.209 ]
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'
Exemplo de armazenamento de registros em arquivo
Nenhum comentário foi encontrado.
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)