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 frozenset para armazenar as palavras únicas.
  • A verificação deve ser feita com o operador in.
  • Retorne True se a palavra estiver presente, False caso 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

  1. texto.lower() transforma tudo em minúsculas para comparação case-insensitive.
  2. .split() separa a string em uma lista de palavras.
  3. frozenset(palavras) cria um conjunto imutável, removendo duplicatas e permitindo busca rápida.
  4. palavra.lower() in conjunto_palavras verifica se a palavra está presente; como é um conjunto, a operação é O(1) em média.
  5. A função retorna o booleano resultante.
  6. Os testes imprimem True e False.

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 conjunto falharia 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