Skip to content

Commit e4df223

Browse files
committed
#19 - Python
1 parent faaa260 commit e4df223

File tree

1 file changed

+76
-0
lines changed
  • Retos/Reto #19 - ANÁLISIS DE TEXTO [Media]/python

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"""
2+
Crea un programa que analice texto y obtenga:
3+
- Número total de palabras.
4+
- Longitud media de las palabras.
5+
- Número de oraciones del texto (cada vez que aparecen un punto).
6+
- Encuentre la palabra más larga.
7+
8+
Todo esto utilizando un único bucle.
9+
"""
10+
11+
import re
12+
13+
def text_analyzer(text: str) -> tuple[int,float,int,list[str]]:
14+
"""
15+
Analiza un texto y obtiene estadísticas básicas.
16+
17+
Calcula los siguientes indicadores:
18+
- Número total de palabras.
19+
- Longitud media de las palabras.
20+
- Número de oraciones (cada vez que aparece un punto).
21+
- Palabra más larga encontrada.
22+
23+
Todo el análisis se realiza utilizando un único bucle.
24+
25+
Args:
26+
text (str): Texto de entrada a analizar.
27+
28+
Returns:
29+
tuple[int, float, int, str]: Una tupla con:
30+
- int: Total de palabras.
31+
- float: Longitud media de las palabras.
32+
- int: Número de oraciones.
33+
- str: Palabra más larga.
34+
35+
Raises:
36+
TypeError: Si el argumento proporcionado no es una cadena.
37+
ValueError: Si el texto está vacío.
38+
"""
39+
if not isinstance(text, str):
40+
raise TypeError("El argumento debe ser una cadena de texto.")
41+
if not text:
42+
raise ValueError("El texto no puede estar vacío.")
43+
44+
clean_text = re.sub(r"[^a-zA-Z0-9\s.]", "", text)
45+
count_words = 0
46+
media = 0
47+
count_sentences = 0
48+
largest_word = []
49+
50+
total_words = clean_text.strip().split()
51+
count_words = len(total_words)
52+
53+
total_char = 0
54+
for word in total_words:
55+
if word.endswith('.'):
56+
count_sentences += 1
57+
word = word[:-1]
58+
if len(largest_word) == 0 or len(word) == len(largest_word[0]):
59+
largest_word.append(word)
60+
elif len(word) > len(largest_word[0]):
61+
largest_word.clear()
62+
largest_word.append(word)
63+
if word == total_words[-1]:
64+
count_sentences += 1
65+
total_char += len(word)
66+
67+
media = total_char / count_words
68+
69+
return (count_words, media, count_sentences, largest_word)
70+
71+
72+
if __name__ == "__main__":
73+
text = "uno dos tres. cuatro cinco seis. siete ocho nueve diez."
74+
results = text_analyzer(text)
75+
print(f"Total de palabras: {results[0]}\nLongitud media de las palabras: {results[1]}")
76+
print(f"Numero de oraciones: {results[2]}\nPalabra mas larga: {results[3]}")

0 commit comments

Comments
 (0)