Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Comando para procurar por regex não é reconhecido

Olá,

No código executado abaixo, quando digito 6 + Enter, o menu é exibido novamente ao invés de perguntar pelo padrão que se deseja buscar.

Não consigo ver o que está errado.

# python/app.py
# -*- coding: UTF-8 -*-
# --coding: ANSI --

import re

def listar(nomes):
    print 'Listando nomes:'
    for nome in nomes:
        print nome

def cadastrar(nomes):
    print 'Digite o nome:'
    nome = raw_input()
    nomes.append(nome)

def remover(nomes):
    print 'Digite o nome que deseja remover: '
    nome = raw_input()
    for nome_disponivel in nomes:
        if nome_disponivel == nome:
            nomes.remove(nome)
            break
        else:
            print 'Nome não disponível!'
            break

def alterar(nomes):
    print 'Digite o nome que deseja alterar: '
    nome = raw_input()
    for nome_disponivel in nomes:
    if nome_disponivel == nome:
        posicao_nome = nomes.index(nome)
        print 'Digite o novo nome: '
        nome_alterado = raw_input()
        nomes[posicao_nome] = nome_alterado
        break
    else:
        print 'Nome não disponível!'
        break

def procurar(nomes):
    print 'Digite nome a procurar:'
    nome_procurar = raw_input()
    if(nome_procurar in nomes):
        print 'Nome existe na lista!'
    else:
    print 'Nome não existe na lista'

def procurar_regex(nomes):
    print('Digite a expressão regular')
    regex = raw_input()
    nomes_concatenados = ''.join(nomes)
    resultado = re.findall(regex, nomes_concatenados)
    if resultado is none:
        print 'Padrão não encontrado!'
    else:
        print 'Padrão encontrado %s' % resultado

# imediatamente abaixo da função cadastrar:

def menu():
    nomes = []
    escolha = ''
    while(escolha != '0'):    
    print 'Digite: 1 para cadastrar nomes, 2 para listar, 3 para remover, 4 para alterar, 5 para procurar, 6 para procurar por expressão regular e 0 para terminar'
    escolha = raw_input()
    if escolha == '1':
            cadastrar(nomes)
    if escolha == '2':
            listar(nomes)
    if escolha == '3':
            remover(nomes)
    if escolha == '4':
            alterar(nomes)
    if escolha == '5':
            procurar(nomes)
    if escolha == '6':
            procurar_regex(nomes)

menu()
2 respostas
solução!

Oi, Roger! Tudo bem? Antes de tudo, consegue me tirar uma dúvida? Seu código formatado aqui no tópico ficou com a indentação errada (faltando) em alguns blocos de for e while. Isso foi só um problema na hora de colar o código aqui ou está assim mesmo? Se está, é importante indentar certinho :D.

Agora, tirando isso, eu testei o código e só encontrei um problema, na linha:

if resultado is none:

A única coisa a mudar é de none para None, com a inicial em maiúscula (none o Python não reconhece :/). Tirando isso, o código funcionou bem para mim, então não sei bem o que pode ser. Você está digitando apenas 6 exatamente e o menu é mostrado de novo? Se sim, então provavelmente seu console está enviando mais alguma coisa (talvez um \n ou \r\n) junto com seu input, e por isso a comparação está falhando e o menu acaba simplesmente aparecendo de novo.

Pra gente testar, faz assim: coloca dentro do while do menu(), abaixo da linha escolha = raw_input(), a linha:

print(repr(escolha))

E mostra pra gente o que aparece! Vamos resolver isso, hehe!

Yan, obrigado pelo suporte. Realmente a indentação após o while estava errada. Corrigi aqui e funcionou. Obrigado.