Um anagrama (do grego ana = voltar ou repetir + graphein = escrever) é uma espécie de jogo de palavras, resultando do rearranjo das letras de uma palavra ou frase para produzir outras palavras, utilizando todas as letras originais exatamente uma vez. Um exemplo conhecido é o nome da personagem Iracema, claro anagrama de América, no romance de José de Alencar. Implemente a função anagrama(frase1, frase2). Os parâmetros frase1 e frase2 são strings. A função deverá retornar True se forem anagramas e False caso contrário. Despreze acentuação (por exemplo: ã = a e ç = c) e os espaços não devem ser computados para efeitos do anagrama.

Passo 1

Beleza, vamos entender o que a gente precisa fazer aqui. O exercício pede para a gente criar uma função chamada anagrama que recebe duas frases como entrada (frase1 e frase2). A função deve verificar se essas duas frases são anagramas, ou seja, se elas têm as mesmas letras, só que em uma ordem diferente. Por exemplo, “amor” e “Roma” são anagramas. Além disso, temos que ignorar acentuação (como transformar “ã” em “a” e “ç” em “c”) e também não considerar os espaços entre as palavras. Para resolver isso, vamos precisar trabalhar com manipulação de strings e entender como comparar as letras de duas frases.

Passo 2

Primeiro, vamos pensar em como tratar as acentuações e os espaços. Precisamos limpar as frases para que todas as letras fiquem sem acentos e sem espaços. Para isso, podemos usar algumas ferramentas de manipulação de strings em Python. Uma maneira de remover acentos é usando a biblioteca unicodedata, que nos ajuda a normalizar as letras.

Passo 3

Vamos importar a biblioteca unicodedata e criar uma função auxiliar para remover os acentos das letras. Essa função vai normalizar a string, separando os caracteres base dos acentos, e depois juntar apenas os caracteres que não são acentos.
import unicodedata

def remove_acentos(texto):
    texto_normalizado = unicodedata.normalize('NFD', texto)
    texto_sem_acentos = ''.join(char for char in texto_normalizado if unicodedata.category(char) != 'Mn')
    return texto_sem_acentos

Passo 4

Agora que temos a função para remover os acentos, vamos criar a função principal anagrama. Nessa função, vamos seguir alguns passos:
  1. Remover acentos de ambas as frases usando a função que criamos.
  2. Remover os espaços das frases para que eles não sejam considerados.
  3. Transformar todas as letras em minúsculas para que a comparação não seja sensível a maiúsculas e minúsculas.
  4. Contar a frequência de cada letra em ambas as frases.
  5. Comparar essas contagens para determinar se são anagramas.

Passo 5

Vamos implementar os passos mencionados na função anagrama.
def anagrama(frase1, frase2):

Passo 6

frase1_sem_acentos = remove_acentos(frase1)
frase2_sem_acentos = remove_acentos(frase2)

Passo 7

frase1_sem_espacos = frase1_sem_acentos.replace(’ ‘, ‘’)
frase2_sem_espacos = frase2_sem_acentos.replace(’ ', ‘’)

Passo 8

frase1_limpa = frase1_sem_espacos.lower()
frase2_limpa = frase2_sem_espacos.lower()

Passo 9

contagem_frase1 = {}
contagem_frase2 = {}
for letra in frase1_limpa:
    contagem_frase1[letra] = contagem_frase1.get(letra, 0) + 1

for letra in frase2_limpa:
    contagem_frase2[letra] = contagem_frase2.get(letra, 0) + 1

Passo 10

return contagem_frase1 == contagem_frase2

Passo 11

Vamos testar nossa função com alguns exemplos para ver se está funcionando direitinho.
# Exemplo 1
print(anagrama("Iracema", "America"))  # Deve retornar True

# Exemplo 2
print(anagrama("amor", "Roma"))        # Deve retornar True

# Exemplo 3
print(anagrama("Python", "Java"))      # Deve retornar False

Resposta

A função anagrama retorna True se as duas frases forem anagramas e False caso contrário, considerando as regras de ignorar acentuação e espaços.

Exercícios relacionados