Criando um Sistema de Notas Escolares em Python – Cálculo de Médias e Aprovação

Projetos práticos são a melhor forma de aprender programação. Um dos mais interessantes para iniciantes é o sistema de notas escolares, onde registramos alunos, suas notas, calculamos médias e verificamos se foram aprovados ou reprovados.

Esse projeto é ideal para praticar conceitos como:

Vamos construir juntos um sistema simples, mas funcional, que pode ser facilmente expandido.


🔹 O que o sistema fará?

Nosso programa será capaz de:

  1. Cadastrar alunos e suas notas.

  2. Calcular médias de cada aluno.

  3. Determinar se o aluno está aprovado ou reprovado.

  4. Listar todos os alunos cadastrados.

  5. (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:


✅ 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

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

Estrutura Básica de um Programa C# com exemplos