Expressão de pesquisa


Com base em um tipo de pesquisa bem interessante que é feito em alguns softwares, resolvi montar o parse para a expressão.
Vou explicar:
Em alguns programas, principalmente na hora de enviar algumas folhas para a impressora, podemos informar 1 ou mais páginas específicas que queremos imprimir. E para isto, podemos utilizar uma notação que seria:

1;3;5 - Imprime as páginas 1, 3 e 5 somente.
5-10  - Imprime todas as páginas de 5 a 10.

Mas eu acrescentei ainda mais um novo item nesta notação, que seria o ‘*’ (asterisco), que tras os numeros daquele tamanho, que iniciem com o numero informado, assim:

9*  - Traz de 90 a 99
94* - Traz de 940 a 949
7** - Traz de 700 a 799

E para brincar um pouco também com a programação funcional. Utiilizando funções lambda, map, xrange e list comprehensions.

Então deixo uma pergunta para quem gosta de melhorar sempre mais e mais seus algoritimos: onde posso utilizar a função ‘filter’ ai neste pequeno trecho de codigo ?

#!/usr/bin/python
# -*- encoding: utf-8 -*-

pesquisa = ';1;3;8-30;99*;4*;'

def montanumeros(v):
    try:
        res = [] #resultado final
        add = lambda x: res.append(x)
        for item in v.split(';'):
            if item.count('-') > 0:
                i,f = map(int,item.split('-'))
                map( add, [ x for x in xrange(i,f+1) ] )
            elif item.count('*') > 0:
                for x in xrange( 0,int('1'+('0'*len(item))) ):
                    if str(x).startswith(item[0:item.index('*')]) and len(str(x)) == len(item):
                        add(x)
            else:
                if item: add(item)
        print res
    except:
        print "Ocorreu algum erro ao tratar a expressao. Verifique!"

montanumeros(pesquisa)
About these ads

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s