Saltar al contenido principal

Palíndromo

Comprueba si una cadena se lee igual al derecho que al revés. Domina el slicing de strings y la normalización de texto en Python.

slicing [::-1] str.lower() str.replace() comparación de strings

El problema

Escribe una función es_palindromo(texto) que devuelva True si el texto es un palíndromo.

La función debe ignorar mayúsculas, espacios y signos de puntuación:

  • "Amo la paloma"True (amolapaloma invertido es amolapaloma)
  • "radar"True
  • "Python"False

Ejemplos

textoresultado
"radar"True
"Anita lava la tina"True
"A man a plan a canal Panama"True
"Python"False
"hello"False

Código inicial

def es_palindromo(texto):
    # Tu código aquí
    pass


print(es_palindromo("radar"))              # True
print(es_palindromo("Anita lava la tina")) # True
print(es_palindromo("Python"))             # False

Concepto clave: el slicing inverso [::-1]

Python permite invertir cualquier secuencia con el slice [::-1]:

"hola"[::-1]        # "aloh"
[1, 2, 3][::-1]    # [3, 2, 1]

El truco s == s[::-1] comprueba si una cadena es igual a su inverso en una sola línea.

Variante: palíndromo de números

def es_palindromo_numero(n):
    s = str(abs(n))  # abs() para manejar negativos
    return s == s[::-1]


print(es_palindromo_numero(121))   # True
print(es_palindromo_numero(-121))  # False (los negativos no son palíndromos)
print(es_palindromo_numero(1221))  # True

Próximos pasos

  • Escribe la versión sin usar slicing: usa dos punteros, uno desde el inicio y otro desde el final
  • Comprueba si una lista es palíndromo: [1, 2, 3, 2, 1]