Cómo comprobar si una cadena es un palíndromo en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si una cadena es un palíndromo en Python. Un palíndromo es una secuencia de caracteres que se lee igual hacia adelante que hacia atrás, como "madam" o "racecar".

El laboratorio te guía a través de la creación de un script de Python que define una función is_palindrome para identificar palíndromos. Esto implica procesar el texto de entrada convirtiéndolo a minúsculas y eliminando los espacios, y luego comparar el texto procesado con su versión invertida. También aprenderás cómo probar la función con palabras de ejemplo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") subgraph Lab Skills python/strings -.-> lab-559574{{"Cómo comprobar si una cadena es un palíndromo en Python"}} python/conditional_statements -.-> lab-559574{{"Cómo comprobar si una cadena es un palíndromo en Python"}} python/function_definition -.-> lab-559574{{"Cómo comprobar si una cadena es un palíndromo en Python"}} python/regular_expressions -.-> lab-559574{{"Cómo comprobar si una cadena es un palíndromo en Python"}} end

Definir Palíndromos

En este paso, exploraremos el concepto de palíndromos y cómo identificarlos utilizando Python. Un palíndromo es una palabra, frase, número u otra secuencia de caracteres que se lee igual hacia adelante que hacia atrás. Ejemplos incluyen "madam", "racecar" y "level".

Para comenzar, creemos un script de Python para definir qué es un palíndromo.

  1. Abre el editor de VS Code en el entorno de LabEx.

  2. Crea un nuevo archivo llamado palindrome.py en el directorio ~/project.

    Puedes crear un nuevo archivo haciendo clic derecho en el panel del Explorador (generalmente en el lado izquierdo) y seleccionando "New File". Asegúrate de guardar el archivo como palindrome.py en el directorio ~/project.

  3. Agrega el siguiente código de Python al archivo palindrome.py:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        return processed_text == processed_text[::-1]
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")

    Analicemos este código:

    • def is_palindrome(text):: Esta línea define una función llamada is_palindrome que toma una cadena text como entrada.
    • processed_text = ''.join(text.lower().split()): Esta línea prepara el texto de entrada para la comprobación de palíndromos. Primero convierte el texto a minúsculas utilizando .lower() y luego elimina cualquier espacio utilizando .split() para dividir la cadena en una lista de palabras, y ''.join() para unir las palabras de nuevo en una sola cadena sin espacios.
    • return processed_text == processed_text[::-1]: Esta línea compara el texto procesado con su inverso. processed_text[::-1] crea una copia invertida de la cadena. Si el texto procesado es igual a su inverso, la función devuelve True (es un palíndromo); de lo contrario, devuelve False.
    • Las líneas después de la definición de la función son un ejemplo de uso. Llama a la función is_palindrome con la palabra "madam" y muestra si es un palíndromo o no.
  4. Ahora, ejecutemos el script. Abre una terminal en el WebIDE. Por lo general, puedes encontrar una pestaña de terminal en la parte inferior de la interfaz de VS Code, o puedes abrir una nueva a través del menú: Terminal -> New Terminal.

  5. En la terminal, navega al directorio ~/project (si no estás ya allí):

    cd ~/project
  6. Ejecuta el script de Python:

    python palindrome.py
  7. Deberías ver la siguiente salida:

    'madam' is a palindrome

    Esto confirma que nuestro script identifica correctamente a "madam" como un palíndromo.

Invertir y Comparar

En este paso, profundizaremos en cómo funciona la función is_palindrome invirtiendo explícitamente la cadena de entrada y luego comparándola con la original. Esto te dará una comprensión más clara del proceso de identificación de palíndromos.

  1. Abre el archivo palindrome.py en el editor de VS Code. Este es el mismo archivo que creaste en el paso anterior.

  2. Modifica la función is_palindrome en palindrome.py para invertir la cadena explícitamente:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        reversed_text = processed_text[::-1]  ## Explicitly reverse the string
        return processed_text == reversed_text
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")
    
    word2 = "hello"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")

    Esto es lo que cambió:

    • reversed_text = processed_text[::-1]: Esta línea crea una copia invertida de la cadena processed_text y la asigna a la variable reversed_text.
    • return processed_text == reversed_text: Esta línea ahora compara el texto procesado original con el texto invertido explícitamente.
    • Se agregó un segundo ejemplo con la palabra "hello" para demostrar un no palíndromo.
  3. Guarda los cambios en palindrome.py.

  4. Ejecuta el script nuevamente en la terminal:

    python palindrome.py
  5. Ahora deberías ver la siguiente salida:

    'madam' is a palindrome
    'hello' is not a palindrome

    Esta salida confirma que el script identifica correctamente tanto palíndromos como no palíndromos. Al invertir explícitamente la cadena, hemos hecho más transparente la lógica de la función is_palindrome.

Ignorar Mayúsculas, Minúsculas y Espacios

En este paso, mejoraremos nuestra función is_palindrome para manejar frases que son palíndromos pero contienen espacios y letras en mayúsculas y minúsculas mezcladas. Por ejemplo, "A man, a plan, a canal: Panama" es un palíndromo si ignoramos los espacios, la puntuación y las mayúsculas y minúsculas.

  1. Abre el archivo palindrome.py en el editor de VS Code.

  2. Modifica la función is_palindrome en palindrome.py para ignorar mayúsculas, minúsculas y espacios:

    import re
    
    def is_palindrome(text):
        processed_text = re.sub(r'[^a-zA-Z]', '', text).lower()
        reversed_text = processed_text[::-1]
        return processed_text == reversed_text
    
    ## Example usage
    word1 = "A man, a plan, a canal: Panama"
    if is_palindrome(word1):
        print(f"'{word1}' is a palindrome")
    else:
        print(f"'{word1}' is not a palindrome")
    
    word2 = "Racecar"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")
    
    word3 = "hello"
    if is_palindrome(word3):
        print(f"'{word3}' is a palindrome")
    else:
        print(f"'{word3}' is not a palindrome")

    Analicemos los cambios:

    • import re: Esta línea importa el módulo re, que proporciona operaciones de expresiones regulares.
    • processed_text = re.sub(r'[^a-zA-Z]', '', text).lower(): Esta línea ahora utiliza una expresión regular para eliminar cualquier carácter que no sea una letra (a - z, A - Z) del texto de entrada. re.sub(r'[^a-zA-Z]', '', text) reemplaza todos los caracteres que no son letras con una cadena vacía, eliminándolos efectivamente. Luego, .lower() convierte la cadena resultante a minúsculas.
    • Hemos agregado ejemplos de uso con "A man, a plan, a canal: Panama", "Racecar" y "hello" para probar la función actualizada.
  3. Guarda los cambios en palindrome.py.

  4. Ejecuta el script nuevamente en la terminal:

    python palindrome.py
  5. Ahora deberías ver la siguiente salida:

    'A man, a plan, a canal: Panama' is a palindrome
    'Racecar' is a palindrome
    'hello' is not a palindrome

    Esta salida confirma que el script ahora identifica correctamente los palíndromos incluso con espacios, puntuación y letras en mayúsculas y minúsculas mezcladas. La expresión regular limpia efectivamente el texto de entrada, permitiendo una detección precisa de palíndromos.

Resumen

En este laboratorio, comenzamos explorando el concepto de palíndromos, que son cadenas de texto que se leen igual de adelante hacia atrás que de atrás hacia adelante. Luego, creamos un script de Python llamado palindrome.py que contiene una función is_palindrome(text) para identificar palíndromos.

La función is_palindrome primero preprocesa el texto de entrada convirtiéndolo a minúsculas y eliminando los espacios. Luego, compara el texto procesado con su versión invertida para determinar si es un palíndromo, devolviendo True si lo es y False en caso contrario. El script también incluye ejemplos de uso que demuestran cómo llamar a la función e imprimir el resultado.