Olá! Excelente iniciativa e um código muito bem estruturado, com a lógica separada em funções. Você está no caminho certo para resolver o problema, e o raciocínio geral está ótimo!
Analisando seu código, vi alguns pontos que podemos ajustar para que ele funcione como esperado e também para deixá-lo um pouco mais alinhado com as práticas comuns em Python.
Parabéns especialmente pela linha qtde_vogais[vogal] = qtde_vogais.get(vogal, 0) + 1
. Usar o método .get()
com um valor padrão é uma forma muito inteligente e "Pythonica" de fazer essa contagem!
Pontos de Atenção e Sugestões de Melhoria
1. O Erro Principal: replace() não funciona "no lugar"
Na sua função limpa_texto, a linha frase.replace(simbolo, "") não altera a variável frase. Em Python, as strings são imutáveis, o que significa que métodos como .replace() retornam uma nova string modificada. Você precisa atribuir esse resultado de volta à variável.
- Seu código: frase.replace(simbolo, "")
- Correção: frase = frase.replace(simbolo, "")
2. Tratamento de Vogais com Acento
Na sua lista de simbolos
, você incluiu as vogais acentuadas (á
, é
, etc.). Com a correção acima, seu código iria remover essas vogais, em vez de contá-las. O ideal é "normalizar" o texto, ou seja, substituir as vogais acentuadas por suas versões sem acento.
3. Loop Mais Simples e "Pythonico"
Em vez de percorrer os índices de uma lista com for i in range(len(frase))
, o Python permite que você percorra os próprios itens diretamente, o que deixa o código mais limpo.
- Seu código:
for i in range(len(frase)): if frase[i] in vogais:
- Sugestão:
for letra in frase: if letra in vogais:
Versão Refatorada do Código
Aqui está uma versão do seu código com as correções e sugestões aplicadas. Organizei a lógica em uma única função para simplificar e adicionei comentários para explicar cada passo.
def contar_vogais(texto_original):
"""
Conta a ocorrência de cada vogal em um texto, tratando acentos e símbolos.
"""
# 1. Normalização: Converte para minúsculas e substitui acentos.
texto = texto_original.lower()
texto = texto.replace('á', 'a').replace('à', 'a').replace('â', 'a').replace('ã', 'a')
texto = texto.replace('é', 'e').replace('ê', 'e')
texto = texto.replace('í', 'i')
texto = texto.replace('ó', 'o').replace('ô', 'o').replace('õ', 'o')
texto = texto.replace('ú', 'u')
# 2. Preparação: Define as vogais e cria o dicionário para a contagem.
vogais = "aeiou"
# Inicia o dicionário com todas as vogais com contagem 0.
contagem_vogais = {}.fromkeys(vogais, 0)
# 3. Contagem: Percorre o texto limpo, letra por letra.
for letra in texto:
# Se a letra for uma das vogais, incrementa o contador dela.
if letra in vogais:
contagem_vogais[letra] += 1
return contagem_vogais
# --- Execução Principal ---
# Pede a frase ao usuário
frase_usuario = input('Digite sua frase para a contagem das vogais: ')
# Chama a função para obter o dicionário com a contagem
resultado = contar_vogais(frase_usuario)
print("\n--- Resultado da Contagem ---")
# Itera sobre o dicionário de resultados para imprimir de forma organizada.
for vogal, quantidade in resultado.items():
# Apenas imprime as vogais que apareceram pelo menos uma vez
if quantidade > 0:
print(f"A vogal '{vogal.upper()}' apareceu {quantidade} vezes na frase.")
Seu raciocínio original estava muito bom! Esses ajustes são o tipo de refinamento que a gente aprende com a prática. Continue com o ótimo trabalho!