Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Agenda com tratamento de erros

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Python Agenda com tratamento de erros

    # 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 delimitador
    agenda.append(novo_contato)





    # programa

    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 Valew`s... \n'

    salva()

    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'

  • Font Size
    #2
    procure postar endentado, e o código precisa ser totalmente reformulado

    a idéia é até boa, mas... por exemplo, na sua função de checagem de email...
    nao seria melhor assim...

    Código:
    def ehEmail(x):
        if ('@' in x) and ('.' in x):
            if (len(x[:(x.find('@'))]) > 2) and (len(x[(x.find('@')):]) > 6):
                return True
            else:
                return False
        else:
            return False
    sigpic

    Comment

    X
    Working...
    X