Modul 2 : Algoritma dan Pemrograman Lanjut (Revisi)
Koding & AI: Deep Learning
Pemrograman Lanjut & Fondasi Kecerdasan Artifisial
Selamat datang di media pembelajaran mendalam (*Deep Learning*). Kuasai pemrograman modular Python, uji efisiensi algoritma *Searching & Sorting*, dan bangun prototipe agen cerdas rekomendasi komoditas lokal Kopi Toraja!
Mindful (Berkesadaran)
Setiap pertemuan dilengkapi Pertanyaan Pemantik, Materi Konsep Mendalam, Lab Virtual Interaktif, dan Jurnal Refleksi agar siswa menyadari proses berpikirnya.
Meaningful (Bermakna)
Menghubungkan komputasi dengan realitas Toraja: mengolah mutu Kopi Arabika Toraja dan katalogisasi digital motif ukiran *Passura'*.
Joyful (Menggembirakan)
Eksperimen langsung di browser tanpa instalasi tambahan, umpan balik kuis instan, dan selebrasi kelulusan confetti di akhir modul.
Peta 4 Pertemuan Terintegrasi & Lab Virtual
Arsitektur Modular & Scope
Efisiensi Searching & Sorting
Multi-Atribut & Logika AI
Integrasi Sistem & Evaluasi
Lembar Kerja Peserta Didik (LKPD) & Rubrik Asesmen
Proyek terintegrasi 5 Bagian praktikum berbasis kearifan lokal Kopi Toraja dan Ukiran Passura'.
Arsitektur Pemrograman Modular & Manajemen Ruang Lingkup (Scope)
kopi_utils.py), dan mengisolasi memori variabel lokal vs global untuk mencegah tabrakan data!
Pertanyaan Pemantik (Apersepsi & Scope):
"Bayangkan sebuah aplikasi kasir di Toraja dengan 100 baris instruksi tanpa fungsi. Jika rumus diskon berubah, apa dampaknya? Dan jika bagian penimbangan serta pengemasan sama-sama membuat variabel bernama berat_kg = 50 di dalam fungsinya masing-masing, mengapa data tidak tertukar? Bagaimana konsep Dekomposisi dan Ruang Lingkup Memori (Scope) melindungi integritas program?"
Materi Inti 1: Dekomposisi & Anatomi Fungsi Python
Dekomposisi adalah proses memecah persoalan komputasi kompleks menjadi sub-masalah kecil yang mandiri. Dalam Python, konsep ini diwujudkan melalui Fungsi (Function):
Menggunakan kata kunci def nama_fungsi(parameter): untuk mendeklarasikan modul.
Pintu masuk nilai data dari luar ke dalam tubuh fungsi untuk dihitung secara terisolasi.
Mengirimkan kembali hasil kalkulasi ke baris pemanggil, bukan sekadar mencetak teks ke layar.
# Fungsi 1: Dekomposisi perhitungan skor mutu (Aroma 30%, Flavor 40%, Aftertaste 30%)
def hitung_skor_kopi(aroma, flavor, aftertaste):
total = (aroma * 0.3) + (flavor * 0.4) + (aftertaste * 0.3)
return total
# Fungsi 2: Dekomposisi klasifikasi mutu (Grade)
def tentukan_grade(skor):
if skor >= 8.5:
return "Specialty Grade 1 (Kualitas Ekspor)"
elif skor >= 8.0:
return "Premium Grade"
else:
return "Commercial Grade"
# Program Utama (Driver Code)
skor_sapan = hitung_skor_kopi(8.5, 9.0, 8.7)
grade_sapan = tentukan_grade(skor_sapan)
print(f"Kopi Arabika Sapan -> Skor: {skor_sapan:.2f} | Status: {grade_sapan}")
Lab Virtual 1: Simulator Eksekusi Fungsi Modular
Ubah parameter nilai masukan, lalu klik tombol untuk melihat bagaimana fungsi menerima argumen dan mengembalikan return value!
Materi Inti 2: Ruang Lingkup Memori (LEGB Rule) & Refaktorisasi Reusable Module
Dalam Python, setiap variabel memiliki Scope (Ruang Lingkup Hidup) yang diatur oleh aturan LEGB (Local, Enclosing, Global, Built-in):
- Variabel Lokal: Variabel yang dideklarasikan di dalam fungsi hanya hidup saat fungsi dieksekusi, lalu dibersihkan dari RAM. Mengaksesnya dari luar fungsi akan menghasilkan galat fatal
NameError. - Variabel Global: Variabel yang dideklarasikan di luar fungsi dan dapat dibaca oleh seluruh modul.
- Refaktorisasi Modul (
kopi_utils.py): Memisahkan fungsi-fungsi utilitas ke file terpisah agar dapat diimpor secara bersih di program utama (from kopi_utils import hitung_skor_kopi).
# Variabel Global Koperasi
nama_koperasi = "Koperasi Kopi Barana' Toraja"
standar_ekspor_skor = 8.50
def evaluasi_lot_kopi(kode_lot, aroma, flavor, aftertaste):
# Variabel Lokal: hanya ada saat fungsi ini dipanggil
skor_lot = (aroma * 0.3) + (flavor * 0.4) + (aftertaste * 0.3)
status_ekspor = skor_lot >= standar_ekspor_skor
print(f"[{nama_koperasi}] Lot {kode_lot} -> Skor: {skor_lot:.2f} | Siap Ekspor: {status_ekspor}")
return skor_lot
# Memanggil fungsi evaluasi
evaluasi_lot_kopi("LOT-TP-01", 8.8, 9.1, 8.9)
# print(skor_lot) # ERROR! NameError: name 'skor_lot' is not defined!
Lab Virtual 2: Simulator Memori Scope Variabel
Uji coba memanggil variabel dari luar fungsi untuk mengamati isolasi memori lokal vs global.
1. Memanggil Variabel Global
Variabel dideklarasikan di luar fungsi (nama_sekolah).
2. Memanggil Variabel Lokal
Mencoba memanggil variabel dari dalam fungsi (status_kondisi).
Apa yang terjadi jika variabel lokal yang didefinisikan di dalam fungsi dipanggil langsung dari luar fungsi tanpa kata kunci global?
Tuliskan pemahamanmu: "Mengapa memecah program ke fungsi dan file terpisah (kopi_utils.py) membuat kolaborasi tim lebih aman dari tabrakan kode?"
Efisiensi Komputasi Searching & Sorting
swapped & Insertion Sort) untuk merangking mutu kopi ekspor tertinggi ke terendah secara mangkus!
Pertanyaan Pemantik:
"Jika gudang Koperasi Barana' memiliki 10.000 lot karung kopi dengan nomor ID terurut, mengapa Binary Search bisa menemukan karung target dalam maksimal 14 langkah, sedangkan Linear Search butuh hingga 10.000 langkah? Dan bagaimana cara algoritma pengurutan menghemat putaran komputasi jika data sudah rapi?"
Materi Inti 1: Linear Search (O(n)) vs Binary Search (O(log n))
Pencarian data lot kopi koperasi mengandalkan dua pendekatan algoritma:
Memeriksa nomor karung kopi satu per satu dari awal. Berguna saat sampel baru masuk dan belum sempat disusun urut.
Syarat mutlak: NOMOR LOT HARUS TERURUT. Algoritma membelah tumpukan data menjadi dua. Dari 10.000 karung, target ditemukan maksimal dalam 14 langkah!
lot_terurut = [101, 105, 120, 134, 150, 175, 188, 192, 205, 210]
def cari_lot_binary(arr, target_lot):
low = 0
high = len(arr) - 1
langkah = 0
while low <= high:
langkah += 1
mid = (low + high) // 2
if arr[mid] == target_lot:
print(f"[Binary Search] Lot {target_lot} DITEMUKAN di index {mid} dalam {langkah} langkah!")
return mid
elif arr[mid] < target_lot:
low = mid + 1
else:
high = mid - 1
return -1
cari_lot_binary(lot_terurut, 188)
Lab Virtual 3: Simulator Perbandingan Efisiensi Langkah Search
Bandingkan jumlah langkah pencarian Linear vs Binary pada 100 data terurut secara empiris.
Materi Inti 2: Bubble Sort Descending & Optimasi Flag Swapped
Dalam perangkingan mutu kopi Koperasi Barana', kita mengurutkan dari skor mutu tertinggi ke terendah (Descending):
- Mekanisme Swap: Membandingkan dua elemen berdekatan. Jika elemen kiri lebih kecil dari kanan, lakukan pertukaran posisi
arr[j], arr[j+1] = arr[j+1], arr[j]. - Optimasi Early-Stop: Jika dalam satu putaran lengkap tidak ada elemen yang ditukar, flag
swappedtetap False dan perulangan dihentikan seketika denganbreak!
skor_lot = [82.5, 89.0, 79.5, 91.2, 85.0, 87.8]
def urutkan_kopi_descending(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if arr[j] < arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break
return arr
hasil_ranking = urutkan_kopi_descending(skor_lot)
print("Hasil Perangkingan Kopi Koperasi:", hasil_ranking)
Lab Virtual 4: Visualizer Animasi Pengurutan Balok
Klik "Mulai Bubble Sort" untuk mengamati proses pertukaran balok secara langsung!
Apa syarat mutlak agar algoritma Binary Search dapat bekerja dengan benar?
Tuliskan analisismu: "Mengapa optimasi flag swapped pada Bubble Sort sangat penting saat memproses dataset komoditas dalam skala besar?"
Struktur Data Multi-Atribut & Rekayasa Agen Cerdas Rekomendasi
Pertanyaan Pemantik:
"Bagaimana aplikasi seperti Spotify merekomendasikan lagu baru yang cocok dengan seleramu tanpa memiliki perasaan manusia? Dan bagaimana kita mengonversi profil rasa kopi menjadi titik koordinat vektor matematika untuk menemukan rekomendasi terbaik?"
Materi Inti 1: List of Dictionaries & Query Multi-Atribut Toraja
Dalam Python, representasi entitas komoditas nyata menggunakan struktur data List of Dictionaries:
daftar_kopi = [
{"kode": "KP-01", "nama": "Arabika Sapan", "lembang": "Buntao", "skor": 87.5},
{"kode": "KP-02", "nama": "Arabika Pulu-pulu", "lembang": "Buntu Pepasan", "skor": 89.0}
]
# Mengakses atribut skor item pertama:
print(daftar_kopi[0]["skor"]) # Output: 87.5
katalog_toraja = [
{"nama": "Pa'tedong", "kategori": "Ukiran", "makna": "Kemakmuran & Tenaga", "popularitas": 95},
{"nama": "Pa'barre Allo", "kategori": "Ukiran", "makna": "Kebesaran Sang Pencipta", "popularitas": 92},
{"nama": "Arabika Sapan", "kategori": "Kopi", "makna": "Cita Rasa Tinggi", "popularitas": 88}
]
# Filter kategori Ukiran dengan popularitas > 90
hasil = [item for item in katalog_toraja if item['kategori'] == 'Ukiran' and item['popularitas'] > 90]
print(hasil)
Lab Virtual 5: Mesin Filter Multi-Atribut Toraja
Pilih kriteria untuk menyaring list of dictionaries secara instan!
| Nama Item | Kategori | Makna / Keterangan | Skor |
|---|
Materi Inti 2: Logika AI Heuristics & Jarak Kemiripan Euclidean
Kecerdasan Artifisial (AI) sistem rekomendasi bekerja dengan 3 tahapan matematis:
- Vektorisasi Profil: Setiap kopi direpresentasikan sebagai titik dimensi (Aroma, Flavor, Aftertaste).
- Perhitungan Jarak Kemiripan: Mengukur kedekatan titik preferensi pengguna dengan data kopi memakai rumus Euclidean Distance: $\sqrt{(A_1 - A_2)^2 + (F_1 - F_2)^2 + (Af_1 - Af_2)^2}$.
- Perangkingan Output: Mengurutkan dari jarak terdekat (persentase kecocokan 0 - 100% tertinggi) untuk menyajikan Top Rekomendasi terbaik.
import math
def hitung_kemiripan(target, item):
# Euclidean Distance antara target pembeli dan profil kopi
jarak = math.sqrt(
(target['aroma'] - item['aroma'])**2 +
(target['flavor'] - item['flavor'])**2 +
(target['aftertaste'] - item['aftertaste'])**2
)
# Konversi jarak menjadi skor persentase kemiripan (0 - 100%)
persen = max(0.0, round(100.0 - (jarak * 25.0), 1))
return persen
Lab Virtual 6: Simulator Mesin Rekomendasi Cerdas
Atur profil rasa pembeli dan amati agen cerdas merangking kopi paling cocok.
Pada formula Euclidean Distance, apa makna nilai jarak komputasi yang mendekati angka 0?
Tuliskan pandanganmu: "Bagaimana memastikan algoritma rekomendasi tetap adil bagi seluruh petani kopi lokal tanpa diskriminasi?"
Integrasi Sistem "Toraja Smart Recommender", Uji Ketahanan, & Asesmen Sumatif
Pertanyaan Pemantik:
"Sebuah software yang hebat bukan hanya software yang berjalan benar saat data sempurna, melainkan software yang tangguh (robust) dan tidak crash saat pengguna memasukkan angka negatif atau string kosong. Bagaimana program buatan timmu mengantisipasi data yang salah menggunakan exception handling?"
Materi Inti: Driver Code Arsitektur & Exception Handling (try - except)
Pada pertemuan puncak ini, arsitektur sistem disempurnakan dengan dua pilar rekayasa perangkat lunak:
- Driver Code (
if __name__ == "__main__":): Blok program pengendali utama yang mengoordinasikan pemanggilan modul input, pencarian, perangkingan, dan rekomendasi dalam satu siklus eksekusi teratur. - Penanganan Eksepsi (
try - except): Menangkap galat tak terduga (sepertiValueErrorsaat pengguna menginput teks alih-alih angka desimal) agar aplikasi tidak macet mendadak. - Gallery Walk Showcase: Setiap pasang siswa mendemokan hasil program dan menerima data uji tantangan dari rekan sebaya (peer testing).
if __name__ == "__main__":
try:
aroma_in = float(input("Masukkan Target Aroma (1 - 10): "))
if not (1.0 <= aroma_in <= 10.0):
raise ValueError("Skor aroma harus berada di rentang 1 s.d. 10!")
print(f"Input valid: {aroma_in}. Memproses rekomendasi cerdas...")
except ValueError as e:
print(f"[Peringatan Keamanan Sistem] Masukan tidak valid: {e}")
finally:
print("Sistem Koperasi Kopi Barana' tetap berjalan stabil.")
Lab Virtual 7: Stress-Testing Ketahanan Program AI
Uji bagaimana program Anda menangani masukan ekstrim (nilai negatif, string kosong, atau angka tidak wajar).
Selamat! Seluruh 4 Pertemuan Telah Tuntas
Anda telah menguasai struktur modular, efisiensi searching & sorting, hingga membangun agen cerdas rekomendasi data lokal Toraja yang terintegrasi dan tangguh!
Apa peran utama konstruksi blok try - except pada software skala produksi?
Tuliskan refleksimu: "Sebutkan 1 ide penerapan koding & AI lanjutan yang ingin kamu kembangkan untuk membantu sekolah atau masyarakat Toraja!"
Proyek: Toraja Smart Recommender
LEMBAR KERJA PESERTA DIDIK (LKPD)
PROYEK: SISTEM AGEN CERDAS REKOMENDASI MUTU KOPI TORAJA
Mata Pelajaran: Koding & AI | Fase E (Kelas X) | SMAS Kristen Barana' - Toraja Utara
1. ....................................................................................................................
2. ....................................................................................................................
A. Skenario Masalah Nyata
Koperasi Usaha Kopi Barana' menerima puluhan sampel biji kopi dari berbagai lembang di Toraja Utara. Koperasi membutuhkan sebuah program terstruktur berbasis Python yang dapat:
- Menyimpan data sampel kopi (Kode Lot, Nama Lembang, Varietas, Skor Aroma, Skor Rasa, Skor Aftertaste).
- Memiliki fungsi modular
hitung_skor_total()untuk menghitung Skor Mutu Kopi (Aroma 30%, Rasa 40%, Aftertaste 30%). - Memiliki modul pencarian cepat
cari_lot_binary()(Binary Search) untuk melacak karung sampel di gudang data terurut. - Memiliki modul pengurutan
urutkan_kopi()(Bubble Sort Descending) untuk merangking mutu kopi dari kualitas ekspor tertinggi ke terendah. - Memiliki modul agen cerdas
rekomendasi_kopi()(Similarity Matching) yang merekomendasikan 2 kopi paling cocok sesuai preferensi rasa pembeli internasional.
B. Dataset Sampel Kopi Toraja
| Kode | Varietas / Lembang | Aroma (30%) | Flavor (40%) | Aftertaste (30%) |
|---|---|---|---|---|
| KP-01 | Arabika Sapan (Buntao) | 8.5 | 9.0 | 8.7 |
| KP-02 | Arabika Pulu-pulu (2000 mdpl) | 9.0 | 8.8 | 9.2 |
| KP-03 | Arabika Gandangbatu (Sillanan) | 8.0 | 7.9 | 8.2 |
C. Tugas & Langkah Pengerjaan Proyek Tim
Tuliskan implementasi fungsi penghitung skor total mutu kopi dengan rumus pembobotan SCA (Aroma 30%, Rasa 40%, Aftertaste 30%):
# Tuliskan rumus perhitungan dan kembalikan nilai (return):
...........................................................................................................
pass
Lengkapi fungsi Binary Search di bawah ini untuk mencari indeks kode lot kopi pada daftar lot terurut:
low = 0
high = len(daftar_lot_terurut) - 1
while low <= high:
mid = (low + high) // 2
# Tuliskan kondisi percabangan Binary Search:
...................................................................................................
...................................................................................................
...................................................................................................
return -1 # Kembalikan -1 jika kode lot tidak ditemukan
Lengkapi implementasi Bubble Sort descending untuk merangking data kopi dari mutu tertinggi ke terendah:
n = len(daftar_kopi)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
# Tuliskan kondisi perbandingan dan penukaran (swap) elemen:
...................................................................................................
...................................................................................................
if not swapped:
break
return daftar_kopi
Rancang fungsi pencocokan jarak kemiripan (Euclidean Distance) dan kembalikan 2 kopi paling cocok:
def rekomendasi_kopi(daftar_kopi, target_aroma, target_rasa, target_after):
for item in daftar_kopi:
# 1. Hitung jarak kemiripan Euclidean Distance:
...................................................................................................
# 2. Konversikan jarak menjadi persentase skor kemiripan (0 - 100%):
...................................................................................................
# 3. Urutkan berdasarkan kemiripan tertinggi dan kembalikan 2 rekomendasi terbaik:
...........................................................................................................
pass
Jalankan program terpadu di VS Code / Google Colab dan tempelkan salinan output terminal konsol:
Guru Mata Pelajaran,
Rislyon Ripi, S.Kom.
NIP. -
Ketua Kelompok,
( .................................................... )
Panduan Asesmen Diagnostik, Formatif, & Sumatif
Mengacu pada Permendikdasmen No. 13 Tahun 2025 (8 Dimensi Profil Lulusan & Pembelajaran Mendalam)
A. Asesmen Diagnostik Awal
Kuis Cepat Apersepsi (5 Menit via Kahoot / Google Form / IFP Board)
"Apa kegunaan utama membuat fungsi dalam pemrograman dibandingkan menulis seluruh kode secara memanjang (monolitik)?"
"Jika terdapat 1.000 data acak, berapa perkiraan perbandingan langkah mencari data antara memeriksa satu per satu vs data yang sudah terurut rapi?"
B. Asesmen Formatif (Ceklis Observasi Selama Pembelajaran 3M)
Instrumen Pemantauan Perkembangan Berkesadaran (Mindful), Bermakna (Meaningful), & Menggembirakan (Joyful)
Peserta didik aktif bergantian peran antara Driver (mengetik kode implementasi) dan Navigator (meneliti logika, algoritma, serta pencegahan bug).
Peserta didik membaca dan menafsirkan pesan kesalahan (error traceback) secara mandiri serta melakukan dry-run variabel sebelum meminta bantuan guru.
Mampu memvalidasi kebenaran hasil pengurutan data serta menjelaskan batasan asumsi algoritma rekomendasi (misal: potensi bias terhadap komoditas tertentu).
C. Asesmen Sumatif: Rubrik Analitik Proyek Prototipe AI (4 Skala)
Persis Sesuai Dokumen Resmi Word: Menilai TP 1, TP 2 (Searching & Sorting), TP 3, serta Dimensi Profil Lulusan
| Kriteria Penilaian | Perlu Bimbingan (1) | Cukup (2) | Baik (3) | Sangat Baik (4) |
|---|---|---|---|---|
| Struktur Modular & Dekomposisi (TP 1) | Program masih bersifat monolitik/panjang tanpa fungsi, atau fungsi tidak memiliki parameter dan return value yang tepat. | Program sudah menggunakan fungsi dasar, namun pemisahan tanggung jawab logika antar-fungsi masih tumpang tindih. | Program terdekomposisi dengan baik ke dalam beberapa fungsi modular mandiri dengan parameter dan return yang tepat. | Arsitektur modular sangat rapi, reusable, bersih (clean code), menerapkan variable scoping sempurna, dan minim redundansi. |
| Implementasi Searching & Sorting (TP 2) | Mengalami kesulitan menuliskan algoritma sorting/searching secara mandiri; perulangan logika menghasilkan galat tak berhingga (infinite loop). | Algoritma sorting dan searching dapat berjalan untuk data sederhana, namun gagal saat diterapkan pada list of dictionary multi-atribut. | Mampu mengimplementasikan algoritma Binary Search dan Bubble Sort dengan tepat pada struktur data multidimensi kontekstual lokal. | Mampu memodifikasi dan mengoptimasi algoritma (early-stop flag) serta menjelaskan perbandingan efisiensi waktu komputasi secara mendalam. |
| Logika Agen Cerdas Rekomendasi (TP 3) | Sistem belum mampu memberikan rekomendasi berbasis data; pencocokan masih berupa percabangan statis (hardcoded if-else). | Logika rekomendasi bekerja dengan aturan sederhana, tetapi perankingan hasil kemiripan belum akurat. | Berhasil mengintegrasikan fungsi modular, sorting, dan similarity score untuk menghasilkan rekomendasi berbasis data kontekstual yang valid. | Agen cerdas mampu menghitung metrik jarak kemiripan terbobot, menangani galat input (exception handling), dan memberi rasional rekomendasi. |
| Penalaran Kritis & Kolaborasi (Profil Lulusan) | Pasif dalam kerja tim; tidak mampu menjelaskan alur kerja baris kode yang dibuatnya sendiri. | Cukup aktif dalam tim, namun kesulitan saat diminta melakukan trace code (melacak nilai variabel per langkah eksekusi). | Mampu berkolaborasi harmonis dalam pair programming dan menjelaskan alur algoritma dengan lancar saat ditanya guru/rekan sejawat. | Menunjukkan penalaran kritis tajam dalam mengevaluasi kelemahan/bias algoritma, mendokumentasikan kode secara profesional, dan memimpin kolaborasi tim. |
Lembar Refleksi Diri Siswa (Metakognisi 3-2-1)
Dekomposisi modular Python, efisiensi Binary vs Linear Search, dan formula matematis kemiripan AI.
Melacak indeks nested loop pada sorting dan menghitung rumus Euclidean Distance.
Mengembangkan sistem katalog rekomendasi motif ukiran Passura' atau pemetaan mutu kopi petani Toraja berbasis Python.
