sábado, 14 de novembro de 2009

Problema 6.6

Comecemos com uma solução possível.

01.def identifica_numeros(nome_fich):
02.   """
03.   Identifica se um ficheiro tem números, e retorna o resultado numa lista
04.   """
05.   f_in = open(nome_fich,'r')
06.   resultado =[]
07.   texto = f_in.read()
08.   texto_pal = texto.split()
09.   for pal in texto_pal:
10.      if pal.isdigit():
11.         resultado.append(int(pal))
12.   f_in.close()
13.   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