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
Diagramas de flujo


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.
.lower().strip()— normalizamos: minúsculas para que no distinga mayúsculas ystrip()para quitar espacios sobrantes en los extremos que falsearían la comparación.from collections import Counter—Counteres 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.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 esoCounter("amor") == Counter("roma")daTrue: mismas letras, mismas cuentas.- La comparación de recuentos es más robusta que ordenar y comparar letra a letra, y aprovecha que buscar cada letra en el
Counteres 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): ...Ejecútalo en el navegador
▶ Visualízalo paso a paso en Python Tutor — ve cómo cambian las variables línea a línea.
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.