|
| 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