š 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/exceptagar program tidak crash jika user memasukkan huruf.
2. Struktur Data: List & Dictionary Inti Data
Konsep:
ā¢
ā¢
⢠Python modern mendukung
ā¢
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.csvberisi: Tanggal, Nama, Status. - Baca file, hitung persentase kehadiran tiap siswa.
- Simpan hasil ke
laporan_kehadiran.csvdengan kolom: Nama, Hadir, Alpha, Persentase. - Opsional: Coba library
pandasuntuk penyelesaian 1 baris kode.
6. Aplikasi Web Sekolah (Flask) Deployable
Konsep: Flask adalah framework web mikro. Routing (
Install:
@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
Nama Status Waktu
{% for row in data %}
{{row.nama}} {{row.status}} {{row.waktu}}
{% endfor %}
"""
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_nilaidengan form: Nama, Mapel, Nilai. - Simpan di
nilai_kelas.jsondengan struktur:{"siswa1": {"mapel": 90}}. - Buat halaman
/lihatyang menampilkan tabel nilai & hitung rata-rata otomatis di HTML. - Challenge: Tambahkan fitur hapus data per siswa.