1 usuario conectado

Palíndromos. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada es_palindromo_ignorando_no_alfanumericos que tome una cadena de texto como entrada y devuelva True si la cadena es un palíndromo después de eliminar todos los caracteres que no son alfanuméricos (letras y números) y de ignorar las mayúsculas y minúsculas. En caso contrario, la función debe devolver False.

Un palíndromo es una palabra, frase, número o cualquier otra secuencia de caracteres que se lee igual hacia adelante que hacia atrás, ignorando los espacios, la puntuación y las mayúsculas/minúsculas.   

Por ejemplo:

Piensa en cómo puedes limpiar la cadena para quedarte solo con los caracteres alfanuméricos y luego verificar si la cadena resultante es un palíndromo.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Palíndromos

📋 Copiar código


import re

def es_palindromo_ignorando_no_alfanumericos(texto):
  """
  Verifica si una cadena es un palíndromo ignorando caracteres no alfanuméricos y mayúsculas/minúsculas.

  Args:
    texto: La cadena de texto a analizar.

  Returns:
    True si la cadena es un palíndromo después de la limpieza, False en caso contrario.
  """
  texto_alfanumerico = "".join(re.findall(r'[a-zA-Z0-9]', texto)).lower()
  return texto_alfanumerico == texto_alfanumerico[::-1]

# Ejemplo de uso:
texto1 = "A man, a plan, a canal: Panama"
resultado1 = es_palindromo_ignorando_no_alfanumericos(texto1)
print(f"¿'{texto1}' es un palíndromo (ignorando no alfanuméricos)? {resultado1}")

texto2 = "Race car!"
resultado2 = es_palindromo_ignorando_no_alfanumericos(texto2)
print(f"¿'{texto2}' es un palíndromo (ignorando no alfanuméricos)? {resultado2}")

texto3 = "Hello, world."
resultado3 = es_palindromo_ignorando_no_alfanumericos(texto3)
print(f"¿'{texto3}' es un palíndromo (ignorando no alfanuméricos)? {resultado3}")

texto4 = "Was it a car or a cat I saw?"
resultado4 = es_palindromo_ignorando_no_alfanumericos(texto4)
print(f"¿'{texto4}' es un palíndromo (ignorando no alfanuméricos)? {resultado4}")
 

Explicación de la solución:

  1. import re: Importa el módulo re para trabajar con expresiones regulares.
  2. def es_palindromo_ignorando_no_alfanumericos(texto):: Define la función que toma la cadena texto como entrada.
  3. texto_alfanumerico = "".join(re.findall(r'[a-zA-Z0-9]', texto)).lower(): Limpia la cadena:
    • re.findall(r'[a-zA-Z0-9]', texto): Encuentra todas las coincidencias de caracteres alfanuméricos (letras de la 'a' a la 'z', mayúsculas o minúsculas, y dígitos del 0 al 9) en el texto. Devuelve una lista de estos caracteres.
    • "".join(...): Une todos los caracteres alfanuméricos encontrados en una sola cadena.
    • .lower(): Convierte la cadena resultante a minúsculas para la comparación sin distinción de mayúsculas.
  4. return texto_alfanumerico == texto_alfanumerico[::-1]: Verifica si la cadena alfanumérica limpia es un palíndromo comparándola con su versión invertida ([::-1]). Devuelve True si son iguales (es un palíndromo) y False en caso contrario.

¡Intenta implementar esta función y probarla con los ejemplos proporcionados en el "Ejecutor de Python Interactivo"!