šŸ Python Learning Hub

šŸ Kurikulum Python untuk Guru Informatika

Dari konsep dasar hingga aplikasi nyata untuk manajemen sekolah. Dirancang agar mudah diajarkan, dipraktikkan, dan dikembangkan.

1. Sintaks Dasar & Variabel Fundamental

Konsep: Python membaca kode baris demi baris. Variabel adalah "wadah berlabel" yang menyimpan data. Tipe dasar: str (teks), int (bulat), float (desimal), bool (benar/salah). Fungsi input() selalu mengembalikan string, jadi konversi tipe data sering diperlukan.
šŸ’” Tips Mengajar: Gunakan analogi loker sekolah. Label loker = variabel, isi loker = data. Siswa sering lupa bahwa input() menghasilkan string.
contoh_variabel_siswa.pyPython
# Data siswa kelas X
nama = input("Nama Siswa: ")
kelas = "X-1"
nilai_harian = 85.5
hadir = True

# Konversi & operasi dasar
tahun_lahir = 2026 - 16
status_lulus = nilai_harian >= 75

print(f"\nšŸŽ« Kartu Siswa Digital")
print(f"Nama  : {nama}")
print(f"Kelas : {kelas}")
print(f"Usia  : {tahun_lahir} tahun")
print(f"Nilai : {nilai_harian} | Lulus: {status_lulus}")

šŸ“ Latihan Praktik

Buat program "Kalkulator Rata-Rata Ujian" yang:

  • Minta input 3 nilai ujian (Matematika, B. Indonesia, IPA).
  • Hitung rata-rata dengan 2 desimal.
  • Cetak hasil dalam format rapi: "Rata-rata Anda: 88.67 (Baik)".
  • Tantangan: Gunakan try/except agar program tidak crash jika user memasukkan huruf.

2. Struktur Data: List & Dictionary Inti Data

Konsep:
• List = urutan data terindeks (0,1,2...). Cocok untuk daftar kehadiran, nama siswa.
• Dictionary = pasangan key: value. Akses cepat via kunci. Cocok untuk relasi data (NIS → Nilai).
• Python modern mendukung dict.get() dan .items() untuk iterasi aman.
šŸ’” Tips Mengajar: Bandingkan List = antrian absen, Dict = buku rapor. Tekankan bahwa indeks mulai dari 0, bukan 1.
data_siswa.pyPython
# List nama siswa
siswa = ["Andi", "Budi", "Citra", "Dewi"]

# Dictionary nilai per mapel (key: nama, value: dict nilai)
nilai_siswa = {
    "Andi": {"Matematika": 90, "Fisika": 85},
    "Budi": {"Matematika": 78, "Fisika": 88},
    "Citra": {"Matematika": 92, "Fisika": 95}
}

# Akses & modifikasi
nilai_siswa["Dewi"] = {"Matematika": 88, "Fisika": 90}
nilai_siswa["Andi"]["Matematika"] = 91  # Update nilai

# Loop aman
print("šŸ“Š Rekap Nilai:")
for nama, mapel in nilai_siswa.items():
    rata = sum(mapel.values()) / len(mapel)
    print(f"{nama:<6} → Rata-rata: {rata:.1f}")

šŸ“ Latihan Praktik

Buat "Sistem Pendataan Ekstrakurikuler":

  • Buat dictionary dengan key = nama ekskul, value = list peserta.
  • Tambahkan peserta baru ke ekskul tertentu.
  • Cetak berapa peserta tiap ekskul, dan tampilkan peserta yang mengikuti ≄ 2 ekskul.

3. Logika & Perulangan Alur Program

Konsep:
• if/elif/else mengontrol percabangan keputusan.
• for iterasi koleksi/data yang diketahui jumlahnya.
• while untuk loop tak terbatas sampai syarat terpenuhi.
• break (hentikan paksa), continue (lewati iterasi saat ini).
penilaian_otomatis.pyPython
nilai_mapel = [72, 85, 90, 65, 88, 79, 45, 82]

lulus = []
remedial = []

for n in nilai_mapel:
    if n >= 75:
        lulus.append(n)
    else:
        remedial.append(n)

print(f"āœ… Lulus: {len(lulus)} siswa | Rata: {sum(lulus)/len(lulus):.1f}")
print(f"šŸ”„ Remedial: {len(remedial)} siswa | Nilai: {remedial}")

# Validasi input user
while True:
    try:
        input_nilai = float(input("\nMasukkan nilai baru (0-100): "))
        if 0 <= input_nilai <= 100:
            nilai_mapel.append(input_nilai)
            print("šŸ“Œ Nilai berhasil ditambahkan!")
            break
        else:
            print("āš ļø Nilai harus antara 0 - 100.")
    except ValueError:
        print("āŒ Masukkan angka yang valid.")

šŸ“ Latihan Praktik

Buat "Pengganti Absensi Manual":

  • List 5 nama siswa.
  • Loop minta input: H (Hadir), S (Sakit), I (Izin), A (Alpha).
  • Simpan di dict {nama: status}.
  • Cetak siswa yang Alpha ≄ 3 kali (potensi tidak naik kelas).

4. Fungsi & Modularisasi Reusability

Konsep: Fungsi (def) membungkus logika agar tidak diulang. Parameter = input, return = output. Prinsip DRY (Don't Repeat Yourself). Gunakan Type Hints untuk keterbacaan & debugging mudah.
šŸ’” Tips Mengajar: Ajarkan konsep "Black Box". Fokus pada input & output. Logika di dalam adalah rahasia pabrik.
tools_nilai.pyPython
def hitung_rata(nilai_list: list[float]) -> float:
    """Menghitung rata-rata dari daftar nilai."""
    if not nilai_list: return 0.0
    return round(sum(nilai_list) / len(nilai_list), 2)

def konversi_huruf(nilai: float) -> str:
    """Konversi angka ke predikat A-E."""
    if nilai >= 90: return "A"
    if nilai >= 80: return "B"
    if nilai >= 70: return "C"
    if nilai >= 60: return "D"
    return "E"

def proses_kelas(data_nilai: dict[str, list[float]]) -> dict:
    """Memproses seluruh kelas dan mengembalikan statistik."""
    laporan = {}
    for siswa, nilai in data_nilai.items():
        rata = hitung_rata(nilai)
        laporan[siswa] = {
            "rata": rata,
            "predikat": konversi_huruf(rata),
            "status": "Lulus" if rata >= 70 else "Remedial"
        }
    return laporan

# Penggunaan
kelas_12 = {
    "Rina": [88, 90, 85],
    "Dimas": [65, 70, 72],
    "Sari": [92, 95, 90]
}

rekap = proses_kelas(kelas_12)
for nama, info in rekap.items():
    print(f"{nama:<6} | {info['rata']:<4} | {info['predikat']} | {info['status']}")

šŸ“ Latihan Praktik

Buat modul "Statistik Ujian" dengan 3 fungsi:

  • get_tertinggi(list), get_terendah(list)
  • hitung_lulus(list, threshold=75) → kembalikan jumlah & list nama.
  • Gabungkan dalam satu file, uji dengan data dummy 10 siswa.

5. Manipulasi File: CSV & JSON Data Persistence

Konsep: Data di memori hilang saat program ditutup. open() + konteks with memastikan file aman tertutup. csv untuk tabel rapi, json untuk struktur hierarkis & kompatibel web. Standar industri: jangan hardcode path, gunakan relatif.
ekspor_rapor.pyPython
import csv
import json
from datetime import datetime

# Data simulasi
siswa_data = [
    {"nis": "1001", "nama": "Andi", "mapel": "Matematika", "nilai": 85},
    {"nis": "1002", "nama": "Budi", "mapel": "Matematika", "nilai": 78},
    {"nis": "1001", "nama": "Andi", "mapel": "Fisika", "nilai": 92}
]

# 1. Simpan ke CSV
with open("data_nilai.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["nis", "nama", "mapel", "nilai"])
    writer.writeheader()
    writer.writerows(siswa_data)
print("āœ… CSV tersimpan.")

# 2. Baca & Kelompokkan per Siswa
rekap = {}
with open("data_nilai.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        nis = row["nis"]
        rekap.setdefault(nis, {"nama": row["nama"], "nilai": []})
        rekap[nis]["nilai"].append(float(row["nilai"]))

# 3. Ekspor ke JSON
with open("rapor_kelas.json", "w", encoding="utf-8") as f:
    json.dump(rekap, f, indent=2, ensure_ascii=False)
print("šŸ“˜ JSON rapor berhasil dibuat.")

šŸ“ Latihan Praktik

Buat "Konverter Absensi ke Excel/CSV":

  • Buat file absensi_raw.csv berisi: Tanggal, Nama, Status.
  • Baca file, hitung persentase kehadiran tiap siswa.
  • Simpan hasil ke laporan_kehadiran.csv dengan kolom: Nama, Hadir, Alpha, Persentase.
  • Opsional: Coba library pandas untuk penyelesaian 1 baris kode.

6. Aplikasi Web Sekolah (Flask) Deployable

Konsep: Flask adalah framework web mikro. Routing (@app.route) mengatur URL. Request/Response menangani data form. Template Jinja2 memisahkan logika & tampilan. Cocok untuk prototipe cepat aplikasi admin sekolah.
Install: pip install flask
šŸ’” Tips Mengajar: Jalankan lokal dulu di http://127.0.0.1:5000. Tekankan bahwa Flask bukan database, gunakan list/JSON untuk demo awal.
app_sekolah.pyPython
from flask import Flask, render_template_string, request, redirect, url_for
import json, os

app = Flask(__name__)
DATA_FILE = "data_absensi.json"

# Template HTML sederhana (bisa dipisah ke templates/index.html)
HTML_TEMPLATE = """


App Absensi Kelas

  

šŸ“‹ Absensi Kelas X-RPL


{% for row in data %} {% endfor %}
NamaStatusWaktu
{{row.nama}}{{row.status}}{{row.waktu}}
""" def load_data(): if os.path.exists(DATA_FILE): with open(DATA_FILE, "r") as f: return json.load(f) return [] @app.route("/", methods=["GET", "POST"]) def index(): data = load_data() if request.method == "POST": baru = { "nama": request.form["nama"], "status": request.form["status"], "waktu": __import__("datetime").datetime.now().strftime("%H:%M:%S") } data.append(baru) with open(DATA_FILE, "w") as f: json.dump(data, f) return redirect(url_for("index")) return render_template_string(HTML_TEMPLATE, data=data) if __name__ == "__main__": app.run(debug=True)

šŸ“ Latihan Praktik

Kembangkan menjadi "Sistem Input Nilai Mini":

  • Tambahkan halaman /tambah_nilai dengan form: Nama, Mapel, Nilai.
  • Simpan di nilai_kelas.json dengan struktur: {"siswa1": {"mapel": 90}}.
  • Buat halaman /lihat yang menampilkan tabel nilai & hitung rata-rata otomatis di HTML.
  • Challenge: Tambahkan fitur hapus data per siswa.