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:
- Reciba un valor
nombre. - Si
nombreesNone, devuelva una cadena vacía"". - Si
nombreno es unstr, lanceTypeError. - Elimine espacios al inicio y al final.
- Reduzca múltiples espacios internos a un solo espacio.
- 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
strip()elimina espacios al inicio y al final.split()sin argumentos elimina espacios extra.join()permite reconstruir el texto con un solo espacio.title()convierte cada palabra a formato Título.
Solución explicada (paso a paso)
- Si el nombre es
None, devolvemos"". - Si no es una cadena, lanzamos
TypeError. - Eliminamos espacios al inicio y al final.
- Dividimos el texto con
split()para eliminar espacios múltiples. - Unimos las palabras con un solo espacio.
- Aplicamos
title()para capitalizar cada palabra.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Soportar apellidos compuestos: “de la cruz”
- Mantener partículas en minúscula:
de,la,y - Soportar guiones: “juan-perez”
- 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.