Python Reto #2 — Contar palabras en una frase

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:

  1. Reciba un valor frase.
  2. Si frase es None, devuelva 0.
  3. Si frase no es un str, lance TypeError.
  4. Devuelva el número de palabras en la frase.
  5. 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")2
  • contar_palabras(" hola mundo ")2
  • contar_palabras("")0
  • contar_palabras(" ")0
  • contar_palabras(None)0
  • contar_palabras(123)TypeError

Pistas

  1. split() sin argumentos ya maneja espacios múltiples: " a b ".split()["a", "b"]
  2. Antes de contar, piensa en el caso de cadena vacía o solo espacios.
  3. Valida tipos al inicio para que la función sea predecible.

Solución explicada (paso a paso)

  1. Si la entrada es None, no hay palabras: devolvemos 0.
  2. Si la entrada no es str, lanzamos TypeError (fallar rápido).
  3. 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.
  4. El resultado es la longitud de la lista: len(...).

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Ignorar puntuación: “hola, mundo!” → 2 (requiere limpieza con re o str.translate)
  2. Contar palabras únicas: cuántas distintas aparecen
  3. 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.