Vejamos uma primeira solução a que chamamos ingénua, pois parte da ideia de que o caracter ‘\n’ indica uma linha e um espaço em branco indica uma palavra.
01.
def
wc(texto):
02.
"""Calcula o número de linhas, palavras e caracteres num texto. Não inclui
03.
espaços em branco. Versão ingénua!!!!"""
04.
num_caracteres
=
0
05.
num_palavras
=
0
06.
num_linhas
=
0
07.
for
car
in
texto:
08.
if
car
=
=
'\n'
:
09.
num_linhas
=
num_linhas
+
1
10.
elif
car
=
=
' '
:
11.
num_palavras
=
num_palavras
+
1
12.
else
:
13.
num_caracteres
=
num_caracteres
+
1
14.
return
(num_caracteres, num_palavras, num_linhas)
Agora uma versão mais sofisticada.
01.
def
wc_2(texto):
02.
"""Calcula o número de linhas, palavras e caracteres num texto.
03.
Não inclui espaços em branco"""
04.
num_caracteres
=
0
05.
num_palavras
=
0
06.
num_linhas
=
0
07.
comp_texto
=
len(texto)
08.
posicao
=
0
09.
while
posicao < comp_texto:
10.
# analisa por casos
11.
while
(posicao < comp_texto )
and
(texto[posicao]
=
=
' '
):
12.
posicao
=
posicao
+
1
13.
14.
while
(posicao < comp_texto )
and
(texto[posicao]
=
=
'\n'
):
15.
num_linhas
=
num_linhas
+
1
16.
posicao
=
posicao
+
1
17.
18.
while
(posicao < comp_texto)
and
(texto[posicao] !
=
' '
)
and
(texto[posicao] !
=
'\n'
):
19.
enc_car
=
True
20.
num_caracteres
=
num_caracteres
+
1
21.
posicao
=
posicao
+
1
22.
23.
if
enc_car:
24.
num_palavras
=
num_palavras
+
1
25.
enc_car
=
False
26.
return
(num_caracteres, num_palavras, num_linhas)
Neste caso tratamos de modo mais claro várias linhas em branco ou vários espaços em branco consecutivos.
Mas será que precisamos de complicar assim tanto? Felizmente não! Basta saber um pouco mais sobre os métodos que se aplicam a cadeias de caracteres.... Então se pudermos usar split e splitlines:
1.
def
wc_3(texto):
2.
"""Devolve o número de caracteres, palavras e linhas em texto. Inclui espaços em branco."""
3.
return
(len(texto.replace(
'\n'
,'')), len(texto.split()), len(texto.splitlines()))
4.
5.
def
wc_4(texto):
6.
"""Devolve o número de caracteres, palavras e linhas em texto. Não inclui espaços em branco."""
7.
texto_aux
=
texto.replace(
' '
,'')
# assim não inclui espaços em branco
8.
return
(len(texto_aux.replace(
'\n'
,'')), len(texto.split()), len(texto.splitlines()))
Nestas duas versões a segunda não conta os espaços em branco. Atente-se que tivemos que criar uma cópia do texto original, o que, com ficheiros grandes não é muito simpático.
Sem comentários:
Enviar um comentário