Nivel: Principiante
Tema: Strings, normalización de texto, lógica, validación de entradas, tests con pytest
Objetivo: Determinar si una frase es un palíndromo, ignorando espacios y diferencias entre mayúsculas y minúsculas.
Enunciado
Crea una función llamada es_palindromo(texto) que:
- Reciba un valor
texto. - Si
textoesNone, devuelvaFalse. - Si
textono es unstr, lanceTypeError. - Ignore espacios y mayúsculas/minúsculas.
- Devuelva
Truesi el texto es un palíndromo, oFalseen caso contrario.
Para este reto no es necesario eliminar signos de puntuación; solo ignora espacios y el uso de mayúsculas.
Ejemplos
es_palindromo("anilina")→Truees_palindromo("Anilina")→Truees_palindromo("anita lava la tina")→Truees_palindromo("hola mundo")→Falsees_palindromo("")→Truees_palindromo(None)→Falsees_palindromo(123)→ TypeError
Pistas
- Convierte el texto a minúsculas para evitar diferencias de mayúsculas.
- Elimina los espacios antes de comparar.
- Puedes invertir el texto normalizado usando slicing
[::-1]. - Compara el texto normalizado con su versión invertida.
Solución explicada (paso a paso)
- Si
textoesNone, no evaluamos →False. - Si no es una cadena, lanzamos
TypeError. - Convertimos el texto a minúsculas.
- Eliminamos los espacios (por ejemplo, con
replace(" ", "")). - Comparamos el texto limpio con su versión invertida.
- Si son iguales, es un palíndromo.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Ignorar puntuación: eliminar
, . ! ?antes de comparar - Soportar acentos: normalizar caracteres (
á→a) - Comparación manual: sin usar slicing
- Devolver la versión normalizada junto al resultado
Lo que aprendiste
- Normalización básica de texto
- Comparación de cadenas de forma segura
- Manejo explícito de casos borde
- Cómo testear lógica booleana con
pytest
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Continúa con Reto #7 — Sumar valores en una lista (sin usar sum) para seguir reforzando bucles, acumuladores y validación de datos.