Ejercicio 02 — Comprueba si dos palabras son anagramas comparando sus frecuencias de…

Dificultad: amarillo · Módulo 07 (Diccionarios y sets)

Enunciado

Comprueba si dos palabras son anagramas comparando sus frecuencias de letras

Cómo se resuelve

Dos palabras son anagramas si tienen exactamente las mismas letras con las mismas repeticiones; la lección es que basta comparar sus recuentos de letras, no su orden.

  1. .lower().strip() — normalizamos: minúsculas para que no distinga mayúsculas y strip() para quitar espacios sobrantes en los extremos que falsearían la comparación.
  2. from collections import CounterCounter es un diccionario especializado en contar: Counter("amor") produce un dict como {'a':1, 'm':1, 'o':1, 'r':1} donde cada letra es la clave y su número de apariciones el valor. Lo hace en una sola pasada.
  3. Counter(palabra1) == Counter(palabra2) — dos diccionarios son iguales si tienen las mismas claves con los mismos valores, sin importar el orden en que se crearon. Por eso Counter("amor") == Counter("roma") da True: mismas letras, mismas cuentas.
  4. La comparación de recuentos es más robusta que ordenar y comparar letra a letra, y aprovecha que buscar cada letra en el Counter es rápido gracias al hashing interno del diccionario.

Trampa habitual: intentar comparar las palabras ordenando sus letras (sorted(p1) == sorted(p2)) funciona, pero mucha gente cae en comparar solo la longitud o el conjunto de letras con set. Un set pierde las repeticiones: “casa” y “casas” tendrían el mismo set {c,a,s} y parecerían anagramas sin serlo. El Counter sí conserva cuántas veces aparece cada letra.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

# Curso de Python — Modulo 07: Diccionarios y Sets
# Ejercicio 02 — PRACTICA (rellena los TODO)
# Enunciado: Comprueba si dos palabras son anagramas comparando sus frecuencias de letras
# Dificultad: amarillo
# Ejecutar: python3 ej02_practica.py
 
# TODO: importa Counter desde collections
# from collections import Counter
 
# TODO: pide dos palabras al usuario, conviertelas a minusculas y elimina espacios (.strip())
palabra1 = None
palabra2 = None
 
# OPCION A — con Counter (una linea):
# TODO: compara Counter(palabra1) con Counter(palabra2) y guarda True/False en "es_anagrama"
es_anagrama = None
 
# OPCION B — sin Counter (version manual, mas instructiva):
# def contar_letras(palabra):
#     TODO: crea un dict vacio
#     TODO: recorre cada letra en palabra y actualiza su cuenta con .get
#     TODO: devuelve el dict
# es_anagrama = contar_letras(palabra1) == contar_letras(palabra2)
 
# TODO: imprime el resultado con f-string:
#       '"<p1>" y "<p2>" -> SI son anagramas'  o  '... -> NO son anagramas'

Solución — cópiala y ejecútala

# Curso de Python — Modulo 07: Diccionarios y Sets
# Ejercicio 02 — MODELO (resuelto)
# Enunciado: Comprueba si dos palabras son anagramas comparando sus frecuencias de letras
# Dificultad: amarillo
# Ejecutar: python3 ej02_modelo.py
 
from collections import Counter
 
palabra1 = input("Primera palabra: ").lower().strip()
palabra2 = input("Segunda palabra: ").lower().strip()
 
# Counter cuenta las letras de cada palabra y permite comparar directamente
# Counter("amor") == Counter("roma") -> True
if Counter(palabra1) == Counter(palabra2):
    print(f'"{palabra1}" y "{palabra2}" -> SI son anagramas')
else:
    print(f'"{palabra1}" y "{palabra2}" -> NO son anagramas')
 
# Version sin Counter (equivalente manual):
# def contar_letras(palabra):
#     freq = {}
#     for letra in palabra:
#         freq[letra] = freq.get(letra, 0) + 1
#     return freq
# if contar_letras(palabra1) == contar_letras(palabra2): ...

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones