Python Reto #10 — Normalizar nombres (trim + title case)

Nivel: Principiante
Tema: Strings, limpieza de entradas, normalización de texto, validación de datos, tests con pytest
Objetivo: Normalizar nombres ingresados por el usuario eliminando espacios extra y aplicando formato consistente.

Enunciado

Crea una función llamada normalizar_nombre(nombre) que:

  1. Reciba un valor nombre.
  2. Si nombre es None, devuelva una cadena vacía "".
  3. Si nombre no es un str, lance TypeError.
  4. Elimine espacios al inicio y al final.
  5. Reduzca múltiples espacios internos a un solo espacio.
  6. Convierta el nombre a Title Case (primera letra en mayúscula por palabra).

Ejemplos

  • normalizar_nombre("juan perez")"Juan Perez"
  • normalizar_nombre(" juan perez ")"Juan Perez"
  • normalizar_nombre("MARIA lopez")"Maria Lopez"
  • normalizar_nombre("")""
  • normalizar_nombre(None)""
  • normalizar_nombre(123)TypeError

Pistas

  1. strip() elimina espacios al inicio y al final.
  2. split() sin argumentos elimina espacios extra.
  3. join() permite reconstruir el texto con un solo espacio.
  4. title() convierte cada palabra a formato Título.

Solución explicada (paso a paso)

  1. Si el nombre es None, devolvemos "".
  2. Si no es una cadena, lanzamos TypeError.
  3. Eliminamos espacios al inicio y al final.
  4. Dividimos el texto con split() para eliminar espacios múltiples.
  5. Unimos las palabras con un solo espacio.
  6. Aplicamos title() para capitalizar cada palabra.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Soportar apellidos compuestos: “de la cruz”
  2. Mantener partículas en minúscula: de, la, y
  3. Soportar guiones: “juan-perez”
  4. Normalización internacional (acentos)

Lo que aprendiste

  • Limpieza de entradas del usuario
  • Normalización de texto realista
  • Uso combinado de strip, split, join
  • Escritura de funciones predecibles y testeables

Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.

Con este reto completas los 10 primeros retos de Principiante.
Continúa con Reto #11 — Validar email (reglas simples) para empezar a trabajar con validación más realista.