1 usuario conectado

Anagramas. Ejercicio en Python

Comparte esto

 

Escribe una función en Python llamada es_anagrama que tome dos cadenas de texto como entrada y devuelva True si las dos cadenas son anagramas entre sí, y False en caso contrario. Dos cadenas son anagramas si contienen las mismas letras con las mismas frecuencias, sin importar el orden. La comparación no debe distinguir entre mayúsculas y minúsculas.

Por ejemplo:

Piensa en cómo puedes comparar las letras y sus frecuencias en ambas cadenas, ignorando el orden y la capitalización, así como los espacios.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Anagramas

📋 Copiar código


from collections import Counter

def es_anagrama(cadena1, cadena2):
  """
  Verifica si dos cadenas son anagramas entre sí (ignorando espacios y mayúsculas/minúsculas).

  Args:
    cadena1: La primera cadena de texto.
    cadena2: La segunda cadena de texto.

  Returns:
    True si las cadenas son anagramas, False en caso contrario.
  """
  cadena1 = "".join(cadena1.lower().split())
  cadena2 = "".join(cadena2.lower().split())

  return Counter(cadena1) == Counter(cadena2)

# Ejemplo de uso:
texto1a = "listen"
texto1b = "silent"
resultado1 = es_anagrama(texto1a, texto1b)
print(f"¿'{texto1a}' y '{texto1b}' son anagramas? {resultado1}")

texto2a = "triangle"
texto2b = "integral"
resultado2 = es_anagrama(texto2a, texto2b)
print(f"¿'{texto2a}' y '{texto2b}' son anagramas? {resultado2}")

texto3a = "hello"
texto3b = "world"
resultado3 = es_anagrama(texto3a, texto3b)
print(f"¿'{texto3a}' y '{texto3b}' son anagramas? {resultado3}")

texto4a = "Anagram"
texto4b = "nag a ram"
resultado4 = es_anagrama(texto4a, texto4b)
print(f"¿'{texto4a}' y '{texto4b}' son anagramas? {resultado4}")
 

Explicación de la solución:

  1. from collections import Counter: Importa la clase Counter para contar la frecuencia de los caracteres.
  2. def es_anagrama(cadena1, cadena2):: Define la función que toma dos cadenas como entrada.
  3. cadena1 = "".join(cadena1.lower().split()): Procesa la primera cadena:
    • .lower(): Convierte la cadena a minúsculas.
    • .split(): Divide la cadena en una lista de palabras (por defecto, por espacios).
    • "".join(...): Une las palabras resultantes sin ningún separador, eliminando así los espacios.
  4. cadena2 = "".join(cadena2.lower().split()): Realiza la misma operación en la segunda cadena.
  5. return Counter(cadena1) == Counter(cadena2): Crea un Counter para cada cadena procesada. Counter esencialmente cuenta la frecuencia de cada carácter en la cadena. Dos cadenas son anagramas si y solo si el conteo de sus caracteres es idéntico. Por lo tanto, la función devuelve True si los Counter de ambas cadenas son iguales, y False en caso contrario.

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