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:
1.def elimina_vogais(texto):
2.    """ Elimina as vogais do texto."""
3.    vogais ='aeiouAEIOU'
4.    novo_texto = ''
5.    for car in texto:
6.        if car not in vogais:
7.            novo_texto = novo_texto + car
8.    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:

1.def elimina_vogais(texto):
2.    """ Retira as vogais numa cadeia, substituindo-as por espaços em branco."""
3.    vogais = 'aeiou'
4.    for car in vogais:
5.        texto =  texto.replace(ch,' ')
6.    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.

1.def elimina_caracteres(texto, caracteres):
2.    """ Retira os caracteres  numa cadeia, substituindo-as por espaços em branco."""
3.    for car in caracteres:
4.        texto = texto.replace(ch,' ')
5.    return texto
Dentro desta ideia de generalizar podemos tentar com a primeira solução. Exemplo.
01.def elimina_caracteres_d(texto, funcao):
02.    """
03.    Elimina os caracteres que satisfazem uma condição dada pela funcao.
04.    A funcao aplica-se a um caractere dando um resultado booleano: é um filtro!
05.    """
06.    novo_texto = ''
07.    for car in texto:
08.        if not funcao(car):
09.            novo_texto = novo_texto + car
10.    return novo_texto
11. 
12. 
13.def f(car):
14.    return (44 <= ord(car) <= 75)
15. 
16.def vogue(car):
17.    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