Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Exercício: Classificando estudantes por média

Boa noite,

Segue o código feito para a resolução do exercícios

def calcular_media(notas):
    return sum(notas) / len(notas)
    
def verificar_situacao(media):
    if media >=7:
        return "Aprovado"
    elif 5 <= media < 7:
        return "Recuperação"
    else:
        return "Reprovado"
        
def ler_notas():
    entrada = input("Digite as notas separadas por espaço (ex: 7.5 8 6.5): "
    notas = [float(n) for n in entrada,split()]
    return notas
    
def ler_turma():
    turma = []
    quantidade = int(input("Quantos alunos deseja cadastrar?"))
    for i in range(quantidade):
        print(f"\n ---Aluno {i + 1} ---")
        nome = input("Nome do aluno: ")
        notas = ler_notas()
        media = calcular_media(notas)
        situacao = verificar_situacao(media)
        aluno = {
            "nome": nome,
            "notas": notas,
            "media": media,
            "situação": situacao
        }
        turma.append(aluno)
        
        return turma
        
    def exibir_resultados(turma):
    """
    Exibe um resumo com os resultados de todos os alunos.
    """
    print("\n===== RESULTADO DA TURMA =====")
    for aluno in turma:
        print(f"\nAluno: {aluno['nome']}")
        print(f"Notas: {aluno['notas']}")
        print(f"Média: {aluno['media']:.2f}")
        print(f"Situação: {aluno['situacao']}")


def contar_situacoes(turma):
    """
    Conta quantos alunos ficaram em cada situação.
    """
    aprovados = 0
    recuperacao = 0
    reprovados = 0

    for aluno in turma:
        if aluno["situacao"] == "Aprovado":
            aprovados += 1
        elif aluno["situacao"] == "Recuperação":
            recuperacao += 1
        else:
            reprovados += 1

    return aprovados, recuperacao, reprovados

def exibir_contagem(turma):
    """
    Exibe o total de alunos em cada situação.
    """
    aprovados, recuperacao, reprovados = contar_situacoes(turma)

    print("\n===== RESUMO GERAL =====")
    print(f"Total de alunos: {len(turma)}")
    print(f"Aprovados: {aprovados}")
    print(f"Recuperação: {recuperacao}")
    print(f"Reprovados: {reprovados}")


# Programa principal
turma = ler_turma()
exibir_resultados(turma)
exibir_contagem(turma)
1 resposta

Olá, Laura, como vai?

Dei uma boa olhada no seu código e a lógica geral está bem encaminhada, dá pra ver que você entendeu bem a ideia de condicionais aninhadas e de separar responsabilidades em funções, isso já é um baita avanço. Só que tem alguns pontos de sintaxe e de indentação que vão travar a execução, e um errinho de digitação que causa inconsistência nos dados.

Primeiro, na função ler_notas, falta fechar o parêntese do input na linha da entrada, e você usou uma vírgula no lugar de um ponto entre entrada e split(), o certo é entrada.split(). Segundo, repara que dentro de aluno você guarda a chave como "situação" (com acento), mas depois em exibir_resultados e em contar_situacoes você tenta acessar aluno["situacao"] sem acento, então o Python vai acusar erro de chave inexistente, o ideal é padronizar sempre sem acento pra evitar esse tipo de pegadinha. Outro ponto importante: o return turma dentro de ler_turma está indentado dentro do for, isso faz a função retornar assim que cadastra o primeiro aluno, sem completar o loop, então essa linha precisa sair de dentro do for e ficar alinhada com ele, fechando a função só depois de cadastrar todos. Por último, a definição de exibir_resultados está com indentação errada, como se estivesse dentro de ler_turma, o que quebra a estrutura do arquivo todo.

Qualquer dúvida, o fórum está à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!