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.
.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): ...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.