python

Anagrama en Python

En este post de programación en Python vamos a resolver un ejercicio para saber si dos cadenas son anagramas, o mejor dicho, si una cadena es anagrama de otra.

Recuerda que una palabra es anagrama de otra si ambas tienen las mismas letras pero ordenadas de distinta manera. Por ejemplo, Hola y Aloh son anagramas pues aunque tienen distinto orden ambas tienen 4 letras que son las mismas.

En este caso estamos suponiendo que las mayúsculas y minúsculas no importan, ya que normalmente los anagramas no toman en cuenta eso.

Algoritmo general

Lo que vamos a hacer será transformaciones a las cadenas y comparaciones de las mismas. Esto es realmente sencillo. Veamos el proceso:

  1. Convertir ambas palabras a minúsculas
  2. Después, convertir las palabras (que son cadenas) a arreglos
  3. Una vez que ambas cadenas son arreglos, los ordenamos
  4. Convertimos de nuevo los arreglos cadenas. En este punto ambas cadenas ya están ordenadas alfabéticamente y en minúsculas.
  5. Si ambas cadenas son iguales, decimos que una palabra es anagrama de la otra.

Veamos ahora un ejemplo del funcionamiento del algoritmo. Vamos a comparar la palabra Nacionalista y Altisonancia. Primero convertimos ambas a minúsculas: nacionalista y altisonancia.

Después, las ordenamos. nacionalista se convierte en aaaciilnnost y altisonancia en aaaciilnnost.

Finalmente comparamos las cadenas. En este caso son iguales, así que se dice que una palabra es anagrama de la otra. Si no lo son, entonces la cadena no es anagrama de la otra.

Código fuente en Python para anagrama

Ya he explicado el funcionamiento. Ahora veamos el código. He encerrado todo en una función para que sea más fácil de invocar.

"""
    https://parzibyte.me/blog
"""


def anagrama(palabra1, palabra2):
    # Convertimos ambas a minúsculas
    palabra1 = palabra1.lower()
    palabra2 = palabra2.lower()
    # Luego convertimos las cadenas a arreglos, porque vamos a ordenarlas pero es más sencillo ordenar un arreglo
    palabra1_arreglo = list(palabra1)
    palabra2_arreglo = list(palabra2)
    # Las ordenamos
    palabra1_arreglo.sort()
    palabra2_arreglo.sort()
    # Convertir de vuelta a cadena
    palabra1_ordenada = "".join(palabra1_arreglo)
    palabra2_ordenada = "".join(palabra2_arreglo)
    # Y finalmente comprobar si son iguales
    return palabra1_ordenada == palabra2_ordenada

Los comentarios explican el comportamiento del método. El modo de uso es invocarlo con dos cadenas, para que devuelva un booleano.

Poniendo todo junto

Ahora te mostraré un ejemplo de uso de la función:

"""
    https://parzibyte.me/blog
"""


def anagrama(palabra1, palabra2):
    # Convertimos ambas a minúsculas
    palabra1 = palabra1.lower()
    palabra2 = palabra2.lower()
    # Luego convertimos las cadenas a arreglos, porque vamos a ordenarlas pero es más sencillo ordenar un arreglo
    palabra1_arreglo = list(palabra1)
    palabra2_arreglo = list(palabra2)
    # Las ordenamos
    palabra1_arreglo.sort()
    palabra2_arreglo.sort()
    # Convertir de vuelta a cadena
    palabra1_ordenada = "".join(palabra1_arreglo)
    palabra2_ordenada = "".join(palabra2_arreglo)
    # Y finalmente comprobar si son iguales
    return palabra1_ordenada == palabra2_ordenada


cadena1 = "Nacionalista"
cadena2 = "Altisonancia"
es_anagrama = anagrama(cadena1, cadena2)
if es_anagrama:
    print(f"{cadena1} es anagrama de {cadena2}")
else:
    print(f"{cadena1} NO es anagrama de {cadena2}")

# Solicitar al usuario las cadenas
cadena1 = input("Ingresa una cadena: ")
cadena2 = input("Ingresa otra cadena: ")
es_anagrama = anagrama(cadena1, cadena2)
if es_anagrama:
    print(f"{cadena1} es anagrama de {cadena2}")
else:
    print(f"{cadena1} NO es anagrama de {cadena2}")

Como puedes ver estamos probando la función de anagrama de dos maneras. En el primer caso es con palabras proporcionadas por el programador, y en el segundo caso por el usuario.

La ejecución es:

Anagrama en Python

También puedes leer más sobre Python aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.