Python Reto #6 — Palíndromo (ignorando espacios y mayúsculas)

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:

  1. Reciba un valor texto.
  2. Si texto es None, devuelva False.
  3. Si texto no es un str, lance TypeError.
  4. Ignore espacios y mayúsculas/minúsculas.
  5. Devuelva True si el texto es un palíndromo, o False en 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")True
  • es_palindromo("Anilina")True
  • es_palindromo("anita lava la tina")True
  • es_palindromo("hola mundo")False
  • es_palindromo("")True
  • es_palindromo(None)False
  • es_palindromo(123)TypeError

Pistas

  1. Convierte el texto a minúsculas para evitar diferencias de mayúsculas.
  2. Elimina los espacios antes de comparar.
  3. Puedes invertir el texto normalizado usando slicing [::-1].
  4. Compara el texto normalizado con su versión invertida.

Solución explicada (paso a paso)

  1. Si texto es None, no evaluamos → False.
  2. Si no es una cadena, lanzamos TypeError.
  3. Convertimos el texto a minúsculas.
  4. Eliminamos los espacios (por ejemplo, con replace(" ", "")).
  5. Comparamos el texto limpio con su versión invertida.
  6. Si son iguales, es un palíndromo.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Ignorar puntuación: eliminar , . ! ? antes de comparar
  2. Soportar acentos: normalizar caracteres (áa)
  3. Comparación manual: sin usar slicing
  4. 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.