Reto: Anagramas
Crear una función que detecte si dos palabras son anagramas.
Dada una palabra, si reordenamos sus letras obtendremos un anagrama de ella. Por ejemplo, Roma es un anagrama de Amor y viceversa. Otros ejemplos de anagramas son:
- saco -cosa
- frase - fresa
- Eva - ave
- Marta - trama - matar
- amor - ramo - Roma - mora
- valora - Álvaro
- riesgo - Sergio
- poder - Pedro
- delira - lidera
- raza -azar
- alma - mala - lama
- rica - cría
- aire - reía
- gato - gota - toga
- Ernesto - eternos - estreno - enteros
Método 1
Vamos a crear una función que nos diga con True o False si dos palabras son o no son un anagrama una de la otra.
['r', 'o', 'm', 'a']
Luego se ordena de menor a mayor con
Hemos creado una función denominada normalizar que elimina los acentos (tildes) de las letras vayan en mayúsculas o en minúsculas.sort()
. De esta forma, haciendo este proceso en las dos palabras, si coinciden las listas ordenadas quiere decir que contienen los mismos caracteres. Esto nos permite asegurar que las palabras son anagramas la una de la otra.def anagrama(cadena1,cadena2):
cadena1lista=list(cadena1.lower()) #lo pasamos a minúsculas y lo convertimos en una lista de caracteres
cadena2lista=list(cadena2.lower())
cadena1lista.sort() #lo ordenamos
cadena2lista.sort()
return cadena1lista==cadena2lista #comparamos las listas de caracteres ordenadas, si son iguales dará True
palabra1='Roma'
palabra2='amor'
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))
Método 2
Vamos a eliminar los acentos o tildes de las palabras antes de trabajar con ellas.
El método 1 no detectaría que Álvaro y valora son anagramas, pero el método 2 si nos responde
True
. Se basa en el uso de la función replace
.def normalizar(s):
parejas = (
("á", "a"),
("é", "e"),
("í", "i"),
("ó", "o"),
("ú", "u"),
)
for a, b in parejas:
s = s.replace(a, b).replace(a.upper(), b.upper())
return s
def anagrama(cadena1,cadena2):
cadena1=normalizar(cadena1)
cadena2=normalizar(cadena2)
cadena1lista=list(cadena1.lower())
cadena2lista=list(cadena2.lower())
cadena1lista.sort()
cadena2lista.sort()
return cadena1lista==cadena2lista
palabra1='Álvaro'
palabra2='valora'
print("¿Son anagramas {} y {}?: ".format(palabra1,palabra2),anagrama(palabra1,palabra2))
No hay comentarios:
Publicar un comentario