Criando um Sistema de Notas Escolares em Python – Cálculo de Médias e Aprovação
Esse projeto é ideal para praticar conceitos como:
Laços de repetição (
forewhile).Funções para organizar o código.
Manipulação básica de arquivos (opcional).
Vamos construir juntos um sistema simples, mas funcional, que pode ser facilmente expandido.
🔹 O que o sistema fará?
Nosso programa será capaz de:
Cadastrar alunos e suas notas.
Calcular médias de cada aluno.
Determinar se o aluno está aprovado ou reprovado.
Listar todos os alunos cadastrados.
(Opcional) Salvar e carregar os dados em arquivo JSON, para que não se percam quando o programa fechar.
🔹 Definindo as regras do sistema
Cada aluno terá: nome e notas.
A média será calculada pela fórmula:
[
\text{Média} = \frac{\text{nota1 + nota2 + ...}}{\text{quantidade de notas}}
]
Critério de aprovação:
Média ≥ 7.0 → Aprovado ✅
Média < 7.0 → Reprovado ❌
(Claro, você pode personalizar esse critério depois).
🔹 Estrutura básica em Python
Vamos começar criando a estrutura simples do sistema com menu interativo.
# sistema_notas.py
def calcular_media(notas):
return sum(notas) / len(notas)
def cadastrar_aluno(alunos):
nome = input("Nome do aluno: ")
qtd_notas = int(input("Quantas notas deseja cadastrar? "))
notas = []
for i in range(qtd_notas):
nota = float(input(f"Digite a nota {i+1}: "))
notas.append(nota)
media = calcular_media(notas)
status = "Aprovado" if media >= 7 else "Reprovado"
alunos.append({
"nome": nome,
"notas": notas,
"media": media,
"status": status
})
print(f"\n✅ Aluno {nome} cadastrado com sucesso!\n")
def listar_alunos(alunos):
if not alunos:
print("Nenhum aluno cadastrado ainda.")
return
print("\n📋 Lista de Alunos:")
for aluno in alunos:
print(f"- {aluno['nome']} | Média: {aluno['media']:.2f} | {aluno['status']}")
def menu():
alunos = []
while True:
print("\n🎓 Sistema de Notas Escolares")
print("1 - Cadastrar aluno")
print("2 - Listar alunos")
print("3 - Sair")
opcao = input("Escolha: ")
if opcao == "1":
cadastrar_aluno(alunos)
elif opcao == "2":
listar_alunos(alunos)
elif opcao == "3":
print("👋 Encerrando o sistema...")
break
else:
print("Opção inválida! Tente novamente.")
if __name__ == "__main__":
menu()
🔹 Testando o sistema
Exemplo de execução:
🎓 Sistema de Notas Escolares
1 - Cadastrar aluno
2 - Listar alunos
3 - Sair
Escolha: 1
Nome do aluno: Maria
Quantas notas deseja cadastrar? 3
Digite a nota 1: 8
Digite a nota 2: 6
Digite a nota 3: 7
✅ Aluno Maria cadastrado com sucesso!
🎓 Sistema de Notas Escolares
1 - Cadastrar aluno
2 - Listar alunos
3 - Sair
Escolha: 2
📋 Lista de Alunos:
- Maria | Média: 7.00 | Aprovado
🔹 Versão com Persistência em Arquivo (JSON)
Para que os dados não sejam perdidos ao fechar o programa, podemos salvar os alunos em um arquivo JSON.
Exemplo com salvamento automático:
import json
ARQUIVO = "alunos.json"
def carregar_alunos():
try:
with open(ARQUIVO, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return []
except json.JSONDecodeError:
return []
def salvar_alunos(alunos):
with open(ARQUIVO, "w", encoding="utf-8") as f:
json.dump(alunos, f, indent=4, ensure_ascii=False)
def calcular_media(notas):
return sum(notas) / len(notas)
def cadastrar_aluno(alunos):
nome = input("Nome do aluno: ")
qtd_notas = int(input("Quantas notas deseja cadastrar? "))
notas = []
for i in range(qtd_notas):
nota = float(input(f"Digite a nota {i+1}: "))
notas.append(nota)
media = calcular_media(notas)
status = "Aprovado" if media >= 7 else "Reprovado"
alunos.append({
"nome": nome,
"notas": notas,
"media": media,
"status": status
})
salvar_alunos(alunos)
print(f"\n✅ Aluno {nome} cadastrado com sucesso!\n")
def listar_alunos(alunos):
if not alunos:
print("Nenhum aluno cadastrado ainda.")
return
print("\n📋 Lista de Alunos:")
for aluno in alunos:
print(f"- {aluno['nome']} | Média: {aluno['media']:.2f} | {aluno['status']}")
def menu():
alunos = carregar_alunos()
while True:
print("\n🎓 Sistema de Notas Escolares")
print("1 - Cadastrar aluno")
print("2 - Listar alunos")
print("3 - Sair")
opcao = input("Escolha: ")
if opcao == "1":
cadastrar_aluno(alunos)
elif opcao == "2":
listar_alunos(alunos)
elif opcao == "3":
print("👋 Encerrando o sistema...")
break
else:
print("Opção inválida! Tente novamente.")
if __name__ == "__main__":
menu()
📌 O arquivo alunos.json será salvo assim:
[
{
"nome": "Maria",
"notas": [8, 6, 7],
"media": 7.0,
"status": "Aprovado"
},
{
"nome": "João",
"notas": [5, 4, 6],
"media": 5.0,
"status": "Reprovado"
}
]
🔹 Possíveis Expansões
Esse sistema pode ser melhorado de várias formas:
Adicionar edição de notas de alunos já cadastrados.
Implementar remoção de alunos.
Criar relatórios em PDF ou Excel com os resultados.
Adicionar estatísticas da turma: média geral, maior e menor nota.
Criar uma interface gráfica com Tkinter ou PyQt.
Desenvolver uma versão web com Flask ou Django.
✅ Conclusão
O sistema de notas escolares é um excelente exercício para aprender Python, porque combina:
✔ Estruturas de dados (listas e dicionários).
✔ Funções para organização do código.
✔ Condições e cálculos de médias.
✔ Persistência em arquivos (opcional).
Além de útil, ele pode ser expandido para se tornar um sistema robusto de gestão escolar.
💡 Desafio para você: adicione uma função que mostre o ranking da turma, listando os alunos em ordem decrescente de média.

Comentários
Postar um comentário