"""
Detector de palíndromos en Python 3
Un palíndromo es una palabra, frase o número que se lee igual de izquierda
a derecha que de derecha a izquierda. En español hay que ignorar espacios,
signos de puntuación, tildes y la diferencia entre mayúsculas y minúsculas.
Ejemplos clásicos en español:
- "Anita lava la tina"
- "A man a plan a canal Panama"
- "Yo soy"
- "dabale arroz a la zorra el abad"
Código mejorado por David Carrero https://carrero.es
Fecha de modificación: 2026-05-09
"""
import unicodedata
import re
def normalizar(texto: str) -> str:
"""
Elimina tildes, convierte a minúsculas y quita todo lo que no sea
letra o número. Así 'Ánima' y 'anima' se tratan igual.
"""
# Descompone los caracteres Unicode: 'á' ? 'a' + tilde combinatoria
sin_tildes = unicodedata.normalize('NFD', texto)
# Elimina los caracteres combinatorios (tildes, diéresis, etc.)
sin_tildes = ''.join(c for c in sin_tildes if unicodedata.category(c) != 'Mn')
# Minúsculas y solo alfanumérico
return re.sub(r'[^a-z0-9]', '', sin_tildes.lower())
def es_palindromo(texto: str) -> bool:
"""
Devuelve True si el texto es un palíndromo.
Ignora espacios, puntuación, tildes y mayúsculas.
"""
limpio = normalizar(texto)
return limpio == limpio[::-1]
def explicar(texto: str) -> None:
"""Muestra el análisis detallado de un texto."""
limpio = normalizar(texto)
invertido = limpio[::-1]
resultado = es_palindromo(texto)
simbolo = '?' if resultado else '?'
print(f'n{simbolo} "{texto}"')
print(f' Normalizado: {limpio}')
print(f' Invertido: {invertido}')
print(f' ¿Palíndromo? {"Sí" if resultado else "No"}')
# ?? Ejemplos ??????????????????????????????????????????????????????????????????
casos = [
# Palíndromos en español
'Anita lava la tina',
'Dábale arroz a la zorra el abad',
'Yo soy',
'Reconocer',
'Amo la paloma',
# Números
'12321',
'123456',
# Con acentos y puntuación
'Ánima mía',
'Amo Roma',
# No palíndromos
'Hola mundo',
'Python',
]
print('=' * 50)
print(' DETECTOR DE PALÍNDROMOS EN ESPAÑOL')
print('=' * 50)
for caso in casos:
explicar(caso)
# ?? Modo interactivo ??????????????????????????????????????????????????????????
print('n' + '?' * 50)
print('Escribe una frase para comprobar (o pulsa Enter para salir):')
while True:
entrada = input('> ').strip()
if not entrada:
break
explicar(entrada)
Detector de palíndromos en Python 3
Función que determina si una palabra o frase es un palíndromo, manejando correctamente el español: ignora tildes, mayúsculas, espacios y signos de puntuación. Incluye normalización Unicode para que "Ánima" y "anima" se traten igual, ejemplos con frases clásicas como "Dábale arroz a la zorra el abad" y modo interactivo para probar cualquier texto desde la terminal.
Descargar adjuntos
COMPARTE ESTE TUTORIAL
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP