Format Dokumen Pengajaran & Panduan Siswa
BINUS University @ Bekasi SMAS St. John Pertemuan 8 dari 17

MODUL 08 — Mini Project 1: Decision Making

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 120 Menit
Fokus Materi integrasi variabel & input, operator, if/elif/else, flowchart, pengujian skenario
Target Selesai Prototipe program keputusan jalan tanpa error & menangani beberapa kasus
Tools VS Code & Python (Run ▶), kertas flowchart
Prioritas sesi: Wajib: baseline Sistem Penilaian Siswa (input nama & nilai angka → huruf A/B/C/D/E + keterangan lulus/tidak), rancang flowchart sebelum coding, uji beberapa skenario input. Kriteria lulus proyek: program jalan tanpa error dan menangani beberapa kasus.
Materi pengayaan (opsional jika waktu cukup)

Level menengah Cek Kelayakan Tiket Bioskop (nested if: umur + rating film) dan challenge Chatbot Jurusan BINUS (banyak cabang elif + .lower() agar input huruf besar-kecil tetap cocok).

1. Tujuan Pembelajaran

  1. Mengintegrasikan variabel, input(), operator, dan if/elif/else dalam satu program utuh.
  2. Merancang alur program sebagai flowchart sebelum menulis kode.
  3. Membangun program pengambil keputusan interaktif sesuai pilihan proyek (baseline, menengah, atau challenge).
  4. Mengujinya dengan beberapa skenario input yang berbeda — bukan satu.
  5. Melacak sendiri kesalahan logika pada program yang jalan tanpa error tapi hasilnya salah.
  6. Mendemonstrasikan program dan menjelaskan logika keputusannya dengan kalimat sendiri.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-8 dari 17 — 47% perjalanan:

[ 01-02 ] Fondasi: konsep program, algoritma, flowchart [ 03-05 ] Mulai coding: print, variabel, input/output [ 06-07 ] Operator & percabangan if/elif/else [ 08 ] Mini Project 1: Decision Making <-- HARI INI (120 Menit) [ 09 ] Looping / Perulangan [ 10 ] Nested Loop & Pattern Programming [ 11-13 ] List, Functions, String [ 14 ] Mini Project 2: Simple App [ 15 ] AI-Assisted Coding [ 16-17 ] Final Project: Development & Presentation

3. Rundown Waktu Terperinci (120 Menit)

WaktuBlokAktivitas
10'PembukaCover sesi, baca tujuan bersama, rekap Sesi 07 (if/elif/else + indentasi) dan framing: "hari ini tidak ada materi baru — ada proyek pertamamu"
15'BrainstormPilih proyek: baseline Sistem Penilaian Siswa (wajib bisa), menengah Cek Tiket Bioskop, challenge Chatbot Jurusan BINUS — siswa menulis syarat keputusannya sebagai kalimat dulu
20'Rancang alurFlowchart di kertas: mulai → input → belah ketupat keputusan → cabang output → selesai; guru cek alur tiap siswa sebelum semua pindah ke komputer
45'Kerja codingBangun program bertahap: input dulu (uji), lalu satu keputusan (uji), lalu semua cabang (uji) — guru dampingi individual, ini titik jawab utang konsep
20'Demo & feedbackPresentasi singkat 2-3 siswa: demo live + tunjukkan satu bagian kode yang dibanggakan; kelas memberi umpan balik
10'PenutupRangkuman 5 poin, refleksi singkat ("syarat mana yang paling sulit dirumuskan?"), preview Sesi 09 (Looping)

4. Pedagogi & Penjelasan Konsep

A. Analogi Rencana Perjalanan Sebelum Nyalakan Mesin

Naik mobil jauh, orang buka peta dulu — bukan nyala mesin lalu bingung di lampu merah pertama. Flowchart = peta, coding = menyetir. Kurikulum resmi menegaskan urutannya: rancang alur dulu, baru coding. Keuntungan praktisnya nyata saat jam coding: kalau alur sudah di kertas, siswa yang buntu tinggal melihat "cabang mana yang belum saya tulis?" — bukan membayangkan semuanya dari nol. Simbol yang dipakai pun bukan baru: oval (mulai/selesai) dan belah ketupat (keputusan) sudah dibaca di Sesi 01-02 — minggu ini simbol itu kembali, kali ini jadi program sungguhan.

B. Satu Program, Empat Bekal

Hari ini tidak ada sintaks baru — dan itu harus diucapkan dengan bangga. Empat bekal yang selama ini dilatih terpisah kini jadi satu: variabel & input (Sesi 04-05) menyimpan data yang masuk, operator (Sesi 06) menghitung dan menghasilkan True/False, percabangan (Sesi 07) memilih jalan berdasarkan jawaban itu. Pola berpikir yang perlu ditekankan: setiap belah ketupat di flowchart = satu baris if; setiap panah keluar = satu cabang yang dijalankan. Kalau siswa bisa menggambar alurnya, mereka hampir pasti bisa menulis kodenya.

C. Uji Skenario, Bukan Uji Satu Kali

Program keputusan yang "selesai" bukan yang sekali jalan — tapi yang menjawab benar untuk beberapa kasus: nilai tinggi, batas persis, nilai rendah, dan (jika relevan) input tak terduga. Latih kebiasaan "kartu kasus": tulis 3-4 kombinasi input dan jawaban yang diharapkan sebelum run, lalu centang satu per satu. Inilah cara paling awal mendeteksi bug yang tidak berbunyi — program jalan tanpa error tapi cabangnya salah, dan itu tidak bisa ditemukan dengan satu percobaan.

Catatan pengajar: kurikulum resmi menyebut sesi ini titik jawab — pastikan siswa tidak menumpuk utang konsep, dampingi individual. Prioritaskan: baseline selesai utuh lebih berharga daripada challenge setengah jadi. Yang baseline-nya selesai cepat, barulah dorong ke level menengah/challenge.

D. Demo Itu Bagian dari Proyek

Presentasi singkat bukan formalitas — itu latihan menegaskan pemahaman. Format yang disarankan (juga jembatan ke Final Project di Sesi 17): tunjukkan masalah → demo live → sebut satu bagian kode yang dibanggakan. Dengan memilih sendiri satu potongan kode untuk dibanggakan, siswa memaksa dirinya mengidentifikasi bagian yang benar-benar dipahami — dan guru mendapat sinyal cepat bagian mana yang perlu diperkuat.

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Brainstorm & Pilih Proyek (15 menit)

Tampilkan tiga level, minta setiap siswa (atau pasangan) memilih dan menulis syarat keputusannya sebagai kalimat dulu:

Aturan pilihannya satu kalimat: baseline harus dulu selesai utuh — level lain hanya untuk yang baseline-nya sudah jalan.

Langkah 2: Rancang Alur — Flowchart di Kertas (20 menit)

Di kertas: oval "Mulai", jajar genjang "input nama, nilai, kehadiran", belah ketupat untuk tiap keputusan, persegi untuk tiap output, oval "Selesai". Tekankan pemetaan yang sama seperti materi: satu ketupat = satu if. Berkeliling dan cek alur tiap siswa di tahap ini — lebih murah membetulkan peta daripada membetulkan kode.

Langkah 3: Kerja Coding Bertahap (45 menit)

Minta siswa membangun bertahap dan menguji di tiap tahap — bukan menulis semua lalu run sekali:

Tahap A — input dulu (uji):

nama = input("Nama siswa: ")
nilai = int(input("Nilai angka (0-100): "))
hadir = int(input("Kehadiran (%): "))
print(nama, nilai, hadir)   # cek: data masuk semua?

Tahap B — satu keputusan dulu (uji):

if nilai >= 60:
    print("Tuntas")
else:
    print("Belum tuntas")

Tahap C — lengkapi semua cabang (uji 4 kasus): predikat A/B/C/D/E + status lulus. Kartu kasus yang disarankan: 95/90, 75/80 (tepat di batas!), 60/70, 40/90.

Langkah 4: Demo & Feedback (20 menit)

2-3 siswa presentasi: masalah → demo live → satu potongan kode dibanggakan → tanya balik ke kelas: "kalau inputnya X, hasilnya apa?" Kelas menebak, siswa mengetik, program membuktikan. Umpan balik wajib berorientasi "apa yang menarik" dulu, saran sesudahnya.

Langkah 5: Rangkuman & Refleksi (10 menit)

Rangkum 5 poin: alur dulu baru kode, satu ketupat = satu if, uji beberapa skenario, tahap kecil lebih aman dari tulis-semua-sekali, demo = bukti paham. Refleksi singkat lisan: "syarat keputusan mana yang paling sulit dirumuskan, dan kenapa?" Lalu preview Sesi 09.

6. Master Solution Code (kode.py — Sesi 08)

Solusi baseline lengkap — program Sistem Penilaian Siswa yang utuh, jalan tanpa error, dan menangani beberapa kasus. Ini pengembangan penuh dari kode.py stub:

# Sesi 08 - Mini Project 1: Decision Making
# Baseline: Sistem Penilaian Siswa
# Flow: input nama, nilai, kehadiran -> predikat huruf -> status lulus/tidak

print("=== SISTEM PENILAIAN SISWA ===")
nama = input("Nama siswa: ")               # contoh: Budi
nilai = int(input("Nilai angka (0-100): "))   # contoh: 82
hadir = int(input("Kehadiran (%): "))      # contoh: 85

# --- Keputusan 1: predikat huruf (urutan tinggi -> rendah) ---
if nilai >= 90:
    grade = "A"
elif nilai >= 75:
    grade = "B"
elif nilai >= 60:
    grade = "C"
else:
    grade = "D"

# --- Keputusan 2: status lulus (dua syarat, digabung and) ---
lulus = nilai >= 75 and hadir >= 80

# --- Output hasil ---
print()
print("--- HASIL ---")
print("Nama    :", nama)
print("Nilai   :", nilai)
print("Predikat:", grade)
if lulus:
    print("Status  : LULUS - pertahankan!")
else:
    print("Status  : TIDAK LULUS - ayo semangat, masih bisa diperbaiki!")

# Output kalau diisi seperti contoh:
# === SISTEM PENILAIAN SISWA ===
# Nama siswa: Budi
# Nilai angka (0-100): 82
# Kehadiran (%): 85
#
# --- HASIL ---
# Nama    : Budi
# Nilai   : 82
# Predikat: B
# Status  : LULUS - pertahankan!

Empat kartu kasus untuk memastikan "menangani beberapa kasus": Budi 95/90 → A, LULUS · Sinta 75/80 → B, LULUS (tepat di batas, dua-duanya) · Rio 60/70 → C, TIDAK LULUS (nilai cukup, kehadiran kurang) · Ani 40/90 → D, TIDAK LULUS.

Untuk siswa yang cepat selesai, arahkan ke level menengah — inti tambahannya nested if (keputusan di dalam keputusan):

# Level menengah: Cek Kelayakan Tiket Bioskop (inti keputusannya)
umur = int(input("Umur: "))
rating = input("Rating film (SU/13+/R): ").lower()

if umur >= 17:
    print("Boleh menonton semua film")
elif rating == "su":
    print("Boleh menonton film SU")
elif rating == "13+" and umur >= 13:
    print("Boleh menonton film 13+")
else:
    print("Belum boleh menonton film ini")

Dan untuk challenge, kuncinya satu: .lower() membuat "Informatika", "INFORMATIKA", dan "informatika" dicocokkan sama rata — gabungkan dengan elif berlapis untuk tiap jurusan.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
ValueError: invalid literal for int() Nilai diketik dengan teks ("delapan puluh") atau spasi. Alarm input, bukan program rusak. Ketik angka murni. Validasi penuh belum dibahas — cukup dicatat sebagai "skenario tak terduga".
Predikat selalu "D" walau nilainya tinggi Urutan elif terbalik: cabang longgar (>= 60) menangkap dulu semua nilai di atasnya. Tracing dengan nilai 95: masuk cabang mana? Perbaiki urutan tinggi → rendah, else paling bawah.
Status lulus terbalik untuk kehadiran Logika gabungan salah: nilai >= 75 or hadir >= 80 (salah satu cukup) padahal aturannya dua-duanya harus. Uji kartu kasus 60/70: dengan or program bilang lulus — tunjukkan kelemahannya. Ganti ke and, uji ulang 4 kartu.
Program jalan tapi teks hasil tidak muncul print hasil tidak menjorok ke dalam if (atau sebaliknya) — keputusannya tidak pernah dieksekusi. Error senyap khas Sesi 07. Bandingkan indentasi blok luar vs dalam; uji ulang dengan dua input berbeda.
Buntu — kode tidak selesai di menit ke-20 kerja coding Menulis semua sekaligus tanpa menguji tahapan, atau alur belum jelas di kertas. Kembali ke Tahap A: buat input dulu, uji, tambah satu keputusan, uji lagi. Kalau flowchart-nya belum ada, buat minimalis dulu (3 kotak) lalu koding versi kecil.
Kejar challenge, baseline belum utuh Terlena level menengah/challenge padahal wajibnya belum jalan. Terapkan aturan sesi: baseline selesai utuh dulu (kriteria lulus proyek), baru naik level. Guru tegaskan ini bukan hukuman — urutan yang aman.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 09)

Programmu minggu ini bisa memutuskan sekali lalu selesai. Tapi bayangkan siswa yang datang sendirian ke program itu — mau input nilai 5 teman, programmu harus di-run 5 kali. Minggu depan kita beri kemampuan yang selama ini hilang: mengulang. Satu blok kode, dijalankan berkali-kali — dari situ nanti lahir game "Tebak Angka" di Sesi 09 dan pola-pola bintang di Sesi 10.

# Teaser: cetak "LULUS" untuk 5 siswa - tanpa menulis if 5 kali
for i in range(5):
    print("Cek siswa nomor", i + 1)
# (minggu depan if-nya digabung ke dalam loop)

Loop adalah bekal langsung untuk Mini Project 2 (Sesi 14): aplikasi menu yang harus terus bertanya sampai user memilih keluar — persis pola "ulang sampai kondisi terpenuhi".