quarta-feira, 16 de outubro de 2013

Estar em voga...

Pretendemos retirar as vogais que aparecem num dado texto. Vimos nas aulas uma forma simples de o fazer:
def elimina_vogais(texto):
    """ Elimina as vogais do texto."""
    vogais ='aeiouAEIOU'
    novo_texto = ''
    for car in texto:
        if car not in vogais:
            novo_texto = novo_texto + car
    return novo_texto
Como sempre em programação existem alternativas de solução. Algumas requerem que se conheça bem a linguagem que estamos a usar, no nosso caso Python. Isso permite-nos chegar a uma solução extremamente simples:

def elimina_vogais(texto):
    """ Retira as vogais numa cadeia, substituindo-as por espaços em branco."""
    vogais = 'aeiou'
    for car in vogais:
        texto =  texto.replace(ch,' ') 
    return texto

Como se pode ver agora usamos as vogais para conduzir o processo de eliminação. Isto evita ter que andar num longo percurso do texto, caracter a caracter, e fazer um processo de selecção com um if como na primeira solução. Note-se também que enquanto no primeiro caso usamos uma variável auxiliar (novo_texto), no segundo caso não. Esta solução é fácil de tornar mais geral. Por exemplo, se quisermos um programa que elimine um subconjunto de caracteres quaisquer basta alterar uma instrução e uns pequenos ajustes, ou, melhor ainda, passar esses caracteres através de um parâmetro formal.

def elimina_caracteres(texto, caracteres):
    """ Retira os caracteres  numa cadeia, substituindo-as por espaços em branco."""
    for car in caracteres:
        texto = texto.replace(ch,' ') 
    return texto
Dentro desta ideia de generalizar podemos tentar com a primeira solução. Exemplo.
def elimina_caracteres_d(texto, funcao):
    """ 
    Elimina os caracteres que satisfazem uma condição dada pela funcao. 
    A funcao aplica-se a um caractere dando um resultado booleano: é um filtro!
    """
    novo_texto = ''
    for car in texto:
        if not funcao(car):
            novo_texto = novo_texto + car
    return novo_texto


def f(car):
    return (44 <= ord(car) <= 75)

def vogue(car):
    return car in 'aeiouAEIOU'
Agora usamos uma função genérica que se aplica a caracteres dando um resultado booleano. No exemplo apresentamos duas funções possíveis. Como vê a sua imaginação é o limite.

Sem comentários:

Enviar um comentário