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

Diagrama de flujo (actividad) del ejercicio 02

Diagrama de flujo (grafo) del ejercicio 02

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

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.

Conexiones