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 =(