Nivel: Principiante
Tema: Strings, limpieza de texto, casos borde, tests con pytest
Objetivo: Contar cuántas palabras reales hay en una frase, manejando espacios extra y entradas vacías de forma segura.
Enunciado
Crea una función llamada contar_palabras(frase) que:
- Reciba un valor
frase. - Si
fraseesNone, devuelva0. - Si
fraseno es unstr, lanceTypeError. - Devuelva el número de palabras en la frase.
- Debe ignorar espacios extra (por ejemplo, múltiples espacios seguidos).
Para este reto, considera “palabra” como cualquier secuencia de caracteres separada por espacios (no hace falta manejar puntuación de forma avanzada).
Ejemplos
contar_palabras("hola mundo")→2contar_palabras(" hola mundo ")→2contar_palabras("")→0contar_palabras(" ")→0contar_palabras(None)→0contar_palabras(123)→ TypeError
Pistas
split()sin argumentos ya maneja espacios múltiples:" a b ".split()→["a", "b"]- Antes de contar, piensa en el caso de cadena vacía o solo espacios.
- Valida tipos al inicio para que la función sea predecible.
Solución explicada (paso a paso)
- Si la entrada es
None, no hay palabras: devolvemos0. - Si la entrada no es
str, lanzamosTypeError(fallar rápido). - Para contar palabras ignorando espacios extra, usamos
frase.split()(sin parámetros).
Esto divide por cualquier cantidad de espacios en blanco y descarta vacíos. - El resultado es la longitud de la lista:
len(...).
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Ignorar puntuación: “hola, mundo!” → 2 (requiere limpieza con
reostr.translate) - Contar palabras únicas: cuántas distintas aparecen
- Soportar saltos de línea y tabs:
split()ya lo hace, pero puedes añadir casos de test
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
¿Listo para el siguiente? Continúa con Reto #3 — Encontrar el máximo en una lista.
Si publicas tu solución, incluye el comando pytest -q en tu README para validar rápidamente.