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!

0
respostas

Resolução de Atividades - 05 Organizando notas de um concurso de redação

Sim, eu sei. Eu compliquei algo que era simples. Só percebi quando vi a solução no gabarito, mas como eu já tinha feito tudo, decidi enviar a minah resolução mesmo assim. Na minha visão, como foi seguido do curso de Orientação a Objetos, achei que era para ser feito em POO. Tadinho de mim... (Carinha de palhaço).


PARTE 1


models/aluno.py


class Aluno:

    """Representa um aluno com nome e lista de notas"""

    lista_alunos = []

    def __init__ (self, nome: str, ID = None):
        
        self.nome = nome
        self.id = ID
        self.notas = []
        Aluno.lista_alunos.append (self)

    @classmethod

    def adicionar_aluno (cls):

        """Adiciona um aluno à lista de alunos"""

        nome_aluno = input ("Digite o nome completo do aluno: ")
        id_aluno = input ("Digite o ID do aluno(a): ")

        for aluno in cls.lista_alunos:

            if aluno.id == id_aluno:

                print (f"\nO ID {id_aluno} já está cadastrado para o aluno(a) {aluno.nome}. Tente novamente com outro ID.")
                return
            
        aluno = cls (nome_aluno, id_aluno)
        print (f"\nO(A) aluno(a) {aluno.nome} foi adicionado(a) com sucesso!")

    @classmethod

    def buscar_aluno_por_id (cls, ID):

        """ 
        Busca um aluno na lista com base na Chave Primária - ID
        
        Parâmetros:
        - ID: int
        """

        for aluno in cls.lista_alunos:

            if ID == aluno.id:

                return aluno

            else:

                return None

    @classmethod

    def remover_aluno (cls):

        """ Remove um aluno da lista de alunos """

        id = input ("Digite o ID do aluno que deseja remover: ")

        aluno_remover = cls.buscar_aluno_por_id(id)

        if aluno_remover == None:
            
            print("Aluno não encontrado.")

        else:

            confirmacao = input (f"Deseja realmente deletar o aluno {aluno_remover.nome}? (S / qualquer outra tecla para cancelar)")

            if confirmacao == "S":

                cls.lista_alunos.remove (aluno_remover)

            else:

                print ("Voltando ao Menu Principal")

    @classmethod

    def mostrar_lista_alunos (cls):

        """ Mostra a lista de alunos cadastrados no sistema """

        if len (cls.lista_alunos) == 0:

            print ("Não há alunos disponíveis na lista. Ela está vazia!")

        else:

            print (f"{"Alunos".ljust(25)} | {"ID".ljust(25)} | {"Média".ljust(25)}")

            for item in cls.lista_alunos:

                print (f"{item.nome.ljust(25)} | {str(item.id).ljust(25)} | {str((sum(item.notas) / len(item.notas)) if item.notas else 0).ljust(25)}")

    def adicionar_nota (self, nota = 0):

        if nota <= 10 and nota >= 0:

            self.notas.append (nota)

        else:

            print ("Nota inválida. Tente novamente!")

    def remover_nota (self, nota = 0):

        if nota in self.notas:

            self.notas.remove (nota)

        else:

            print ("Nota não encontrada. Tente novamente!")

[NOTE!]
Continua porque estourou o limite de caracteres =(