1
resposta

[Projeto] Organizando notas de um concurso de redação

listaNotas = []
class ConcursoNotas:
    def __init__(self, aluno, nota):
        self.aluno = aluno
        self.nota = nota
        listaNotas.append(self)

    @property
    def aluno(self):
        return self._aluno
    @aluno.setter
    def aluno(self, valor):
        if not valor.strip():
            raise ValueError("O nome não pode ser nulo")
        self._aluno = valor

    @property
    def nota(self):
        return self._nota
    @nota.setter
    def nota(self, valor):
        if  valor < 0 or valor > 10 or not isinstance(valor, (float, int)):
            raise ValueError("a nota deve ser um numero de 0 a 10")
        self._nota = valor

    def __str__(self):
        return (f"Aluno: {self.aluno} - "
                f"Nota: {self.nota}")


ConcursoNotas("marcos", 4.5)
ConcursoNotas("David", 6.0)
ConcursoNotas("lucas", 7.9)
ConcursoNotas("leo", 8)

ListaCres = sorted(listaNotas,
                  key=lambda x: x.nota
                      )
for x in ListaCres:
    print(x)

ContinuaLup = True

while ContinuaLup:
    print("Digite 1 para adicionar nota\n"
          "Digite 2 para Ver notas\n"
          "Digite 3 para sair")
    ent = int(input())
    if ent == 1:
        nome = input("Nome: ")
        nota = float(input("Nota: "))
        ConcursoNotas(nome, nota)
    if ent == 2:
        ListaCres = sorted(listaNotas,
                           key=lambda x: x.nota
                           )
        for x in ListaCres:
            print(x)
    if ent == 3:
        ContinuaLup = False
1 resposta

Olá, João! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de propriedades para validar dados com Python, utilizou muito bem o método especial __str__ para exibir informações de forma organizada e ainda compreendeu a importância do lista global para armazenar e manipular os objetos criados.

Uma dica interessante para o futuro é encapsular a lista de notas dentro da própria classe, evitando variáveis globais. Assim:

class ConcursoNotas:
    lista_notas = []

    def __init__(self, aluno, nota):
        self.aluno = aluno
        self.nota = nota
        ConcursoNotas.lista_notas.append(self)

Isso faz com que o gerenciamento dos objetos fique centralizado na classe, tornando o código mais organizado e fácil de manter.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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