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

Contar vogais

Entendi que era pra contar cada vogar ...

frase = input('Digite sua frase para a contagem das vogais: ')
vogais = ['a', 'e', 'i', 'o', 'u']

def limpa_texto(frase):
    simbolos = ",.!|?;:''()[]{}áéíóúãõâêôçÁÉÍÓÚÃÕÂÊÔÇ"
    for simbolo in simbolos:
        frase.replace(simbolo, "")
    frase = list(frase.lower())
    vogais_frase=[]
    for i in range(len(frase)):
        if frase[i] in vogais:
            vogais_frase.append(frase[i])
    return vogais_frase

def contador_vogais(frase):
    vogais_frase = limpa_texto(frase)
    qtde_vogais = {}
    for vogal in vogais_frase:
        qtde_vogais[vogal] = qtde_vogais.get(vogal, 0) +1
    return qtde_vogais
    
for chave, items in contador_vogais(frase).items():
    print(f"A vogal '{chave.upper()}' aparece {items} vezes na frase '{frase.upper()}'.")

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

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!

solução!

Caso essa resposta tenha solucionado sua dúvida, não esqueça de marcar a resposta como solução!! ✅