Desafio Python
Verificação de pertinência e frozenset
Enunciado
Crie uma função contem_palavra(texto, palavra) que verifica se uma palavra está presente em um texto. Use um frozenset das palavras do texto para garantir pertinência O(1) e ignore maiúsculas/minúsculas. Depois, teste com um texto de exemplo.
Requisitos
- A função deve converter o texto para minúsculas e dividir em palavras.
- Use
frozensetpara armazenar as palavras únicas. - A verificação deve ser feita com o operador
in. - Retorne
Truese a palavra estiver presente,Falsecaso contrário.
Código inicial
def contem_palavra(texto, palavra):
# Seu código aqui
pass
texto = "Python é uma linguagem poderosa e Python é divertido"
print(contem_palavra(texto, "python")) # True
print(contem_palavra(texto, "java")) # False
Saída esperada
True
False
Ver dica
Use texto.lower().split() para obter as palavras, depois frozenset(...) e verifique com palavra.lower() in conjunto.
Mostrar solução
def contem_palavra(texto, palavra):
# Converte o texto para minúsculas e divide em palavras
palavras = texto.lower().split()
# Cria um frozenset para pertinência O(1) e imutabilidade
conjunto_palavras = frozenset(palavras)
# Verifica se a palavra (em minúsculas) está no conjunto
return palavra.lower() in conjunto_palavras
texto = "Python é uma linguagem poderosa e Python é divertido"
print(contem_palavra(texto, "python")) # True
print(contem_palavra(texto, "java")) # False
Passo a passo
texto.lower()transforma tudo em minúsculas para comparação case-insensitive..split()separa a string em uma lista de palavras.frozenset(palavras)cria um conjunto imutável, removendo duplicatas e permitindo busca rápida.palavra.lower() in conjunto_palavrasverifica se a palavra está presente; como é um conjunto, a operação é O(1) em média.- A função retorna o booleano resultante.
- Os testes imprimem
TrueeFalse.
Por que funciona
A pertinência em conjuntos usa tabelas hash, resultando em tempo constante mesmo para grandes volumes de dados. O frozenset é usado para deixar claro que o conjunto não será modificado e para permitir seu uso como chave de dicionário, se necessário.
Erros comuns
- Não normalizar maiúsculas/minúsculas:
"Python" in conjuntofalharia se o conjunto tivesse"python". - Usar lista em vez de conjunto: a busca seria O(n), mais lenta.
- Esquecer de dividir o texto:
frozenset(texto)criaria um conjunto de caracteres, não de palavras.
Outra forma de resolver
Usar set em vez de frozenset se não precisar de imutabilidade. Exemplo:
conjunto = set(texto.lower().split())
return palavra.lower() in conjunto
É preferível quando o conjunto precisa ser modificado depois.
Saída esperada
True
False