1
resposta

[Dúvida] Código funcional, porém repetitivo

Olá! Resolvi a questão 10 da seguinte forma:

entrada = input('Digite uma frase: ').lower()

palavras = filter(lambda p: len(p) >= 5, list(entrada.replace('!','').replace(',','').replace('.','').replace('?','').split(' ')))

print(list(palavras))

A saída está correta, porém o me pareceu um pouco repetitivo, principalmente fazendo aplicando o replace tantas vezes. Gostaria de dicas para melhorar nesse caso.

Obrigada!

1 resposta

Olá, Giovanna! Como vai?

Entendo a sua preocupação, na teoria de Linguagens de Programação chamamos isso de um código verboso, pelo fato de usar repetidamente o replace.

Seu código está funcional, mas pode ser melhorado em termos de legibilidade e eficiência. Uma forma mais elegante e flexível de fazer isso é utilizando o módulo re (regular expressions ou regex), que permite remover todos os sinais de pontuação de uma vez. Dessa forma:

import re

entrada = input('Digite uma frase: ').lower()

# Remove pontuação usando regex e filtra palavras com 5 ou mais letras
palavras = filter(lambda p: len(p) >= 5, re.sub(r'[^\w\s]', '', entrada).split())

print(list(palavras))
  • r'[^\w\s]': seleciona tudo que não é uma letra (\w) ou espaço (\s).
  • re.sub(): substitui esses caracteres por uma string vazia.

Se quiser ir além, pode transformar o resultado em uma lista diretamente:

import re

entrada = input('Digite uma frase: ').lower()

palavras = [p for p in re.sub(r'[^\w\s]', '', entrada).split() if len(p) >= 5]

print(palavras)

Essa versão usa list comprehension, que é mais comum em Python moderno e geralmente mais performática que filter() com lambda.

Se quiser se aprofundar mais no uso de expressões regulares, recomendo:

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado