sábado, 14 de novembro de 2009

Problema 6.6

Comecemos com uma solução possível.


def identifica_numeros(nome_fich):
"""
Identifica se um ficheiro tem números, e retorna o resultado numa lista
"""
f_in = open(nome_fich,'r')
resultado =[]
texto = f_in.read()
texto_pal = texto.split()
for pal in texto_pal:
if pal.isdigit():
resultado.append(int(pal))
f_in.close()
return resultado


Analisemos o código. Abrimos o ficheiro para leitura (linha 5). De seguida criamos um contentor para guardar o resultado (linha 6). Lemos todo o ficheiro e transformamos a longa cadeia de caracteres numa lista de cadeias de caracteres, ou seja palavras. O separador de palavras é o espaço em branco (linhas 7 e 8). Entramos depois num ciclo, onde analisamos palavra a palavra para determinar se estamos na presença de uma cadeia em que todos os seus caracteres são dígitos (linhas 9 a 11). Dentro do ciclo o teste é feito usando o método isdigit(). Nos casos afirmativos, convertemos para inteiro e guardamos no contentor. Fechamos o ficheiro (linha 12) e devolvemos o resultado final (linha 13). Analise as debilidades da solução. Por exemplo: funciona se se tratar de números em vírgula flutuante? Funciona de o número tiver agarrado a um caracter não numérico? Que soluções tem para as questões enunciadas? Sugestão: faça uma análise caracter a caracter em vez de palavra a palavra.

Sem comentários:

Enviar um comentário