Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Faça como eu fiz: contador de caracteres

import string

texto_digitado = input("Digite ou cole o seu texto aqui: ")

def limpar_pontuacao(texto):
    for pontuacao in string.punctuation:
        texto = texto.replace(pontuacao, "")
    return texto

texto_limpo = limpar_pontuacao(texto_digitado)
palavras = texto_limpo.split()

for palavra in palavras:
    print(palavra, len(palavra))
2 respostas

Olá, Estudante. Como vai?

Que solução fantástica! Você foi muito além de um simples contador de caracteres tradicional. Ao importar o módulo string e utilizar a constante string.punctuation dentro de um laço, você criou um verdadeiro preprocessador de texto, limpando símbolos (como pontos, vírgulas e exclamações) antes de realizar a contagem.

A combinação do .replace() com o .split() ficou excelente, pois garante que o programa conte o comprimento real das palavras sem que as pontuações alterem o tamanho delas.

Para agregar ainda mais valor ao seu código e trazer sugestões de boas práticas baseadas no que você está estudando neste capítulo, podemos ajustar um detalhe estrutural importante: o escopo e a organização das funções.

No seu código atual, a função limpar_pontuacao faz a limpeza, mas o ato de separar as palavras e exibir a contagem com o len() foi feito solto no fluxo principal do programa. Pensando em modularização, o ideal é que toda a lógica de contagem também fique encapsulada.

Além disso, podemos fazer uma pequena otimização de performance: em textos muito grandes, fazer um laço for que passa por todas as pontuações possíveis do Python e roda o .replace() várias vezes pode deixar o programa lento. Uma alternativa extremamente rápida e elegante no Python para limpar textos é usar o método nativo .translate().

Veja esta sugestão de como reestruturar e modularizar o seu projeto:

import string

def analisar_comprimento_palavras(texto):
    # Cria uma tabela de tradução que mapeia todas as pontuações para None (as remove)
    tabela_limpeza = str.maketrans("", "", string.punctuation)
    texto_limpo = texto.translate(tabela_limpeza)
    
    # Divide o texto limpo em uma lista de palavras
    palavras = texto_limpo.split()
    
    # Retorna a lista de palavras prontas para o uso
    return palavras

# --- Fluxo Principal do Programa ---
texto_digitado = input("Digite ou cole o seu texto aqui: ")

# Chamamos a função para obter a lista tratada
lista_de_palavras = analisar_comprimento_palavras(texto_digitado)

print("\n--- Contagem de Caracteres por Palavra ---")
for palavra in lista_de_palavras:
    print(f"A palavra '{palavra}' tem {len(palavra)} caracteres.")

Note como o método texto.translate(str.maketrans("", "", string.punctuation)) substitui todo o seu laço for por uma única operação interna do Python, deixando o código incrivelmente rápido e limpo. Ao envelopar isso em analisar_comprimento_palavras, o seu código principal fica super organizado!

Parabéns pelo excelente uso da biblioteca string e pela criatividade na resolução do desafio.

Espero que possa ter lhe ajudado!

solução!

Obrigado pelas dicas!