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

MODUL 14 — Mini Project 2: Simple App

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 120 Menit
Fokus Materi list, while True menu, def per fitur, input(), strip()
Target Selesai Aplikasi menu jalan: lihat/tambah/hapus/keluar, modular per fungsi
Tools VS Code & Python (Run ▶)
Prioritas sesi: Wajib: aplikasi berbasis menu while True (lihat/tambah/hapus/keluar) dengan list sebagai data selama program berjalan, termodular — satu fungsi satu menu — dalam proyek Todo List / Kasir Warung Mini.
Materi pengayaan (opsional jika waktu cukup)

Fitur challenge dari kurikulum: statistik rata-rata untuk daftar nilai, atau cetak struk total belanja — keduanya hanya mengolah list yang sudah ada.

1. Tujuan Pembelajaran

  1. Menggabungkan list, loop, fungsi, dan kondisi dalam satu aplikasi utuh.
  2. Merancang aplikasi berbasis menu (CLI) dengan while True sebagai mesin menu yang terus menyala.
  3. Menyimpan data aplikasi di list selama program berjalan dan menjelaskan umurnya (hilang saat program ditutup).
  4. Menerapkan prinsip modular: satu fungsi untuk tiap fitur menu.
  5. Mengelola daftar dengan aman: append, hapus berdasarkan nomor menu, cek keanggotaan sebelum remove.
  6. Menguji aplikasi dengan skenario lengkap: tambah, lihat, hapus, keluar — termasuk pilihan tak dikenal.
  7. Mendemokan dan menjelaskan aplikasi sendiri dalam waktu singkat.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-14 dari 17 — 82% 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 [ 09 ] Looping / Perulangan [ 10 ] Nested Loop & Pattern Programming [ 11-13 ] List, Functions, String [ 14 ] Mini Project 2: Simple App <-- HARI INI (120 Menit) [ 15 ] AI-Assisted Coding [ 16-17 ] Final Project: Development & Presentation

3. Rundown Waktu Terperinci (120 Menit)

WaktuBlokAktivitas
10'PembukaCover, tujuan sesi, rekap Sesi 13 (string: strip, title, ritual input bersih)
15'BrainstormPilih proyek: Todo List / Kasir Warung Mini; daftar fitur menu (lihat/tambah/hapus/keluar)
20'PerancanganRancang struktur fungsi & alur menu (sketsa di kertas): fungsi per fitur, list sebagai data
50'Kerja CodingKerja coding aplikasi: mesin menu → lihat → tambah → hapus → keluar, uji tiap tahap
15'Demo & FeedbackDemo & umpan balik: 2-3 siswa memperlihatkan aplikasinya di depan kelas
10'PenutupRangkuman: pola menu = kerangka Final Project; preview Sesi 15

4. Pedagogi & Penjelasan Konsep

A. Analogi Buku Kas Warung yang Selalu Terbuka

Aplikasi menu = buku kas warung yang tidak pernah ditutup. Pelanggan datang, kamu catat (tambah), lihat rekap (lihat), coret yang sudah dibayar (hapus), dan kamu tetap di balik meja sampai waktunya pulang (keluar). Datanya di halaman buku — itu list: satu tempat penyimpanan yang terus terbaca dan tercoret selama warung buka. Bedanya dengan program-program sebelumnya: program lama jalan sekali lalu selesai, aplikasi menu hidup — menunggu perintah, mengerjakan, menunggu lagi. Itulah loop while True.

B. while True — Mesin Menu yang Terus Menyala

while True = mesin yang sengaja dibuat tidak pernah berhenti sendiri — dan justru itu bentuknya: berhenti yang mengendalikan harus dari dalam, lewat break. Ini kebalikan jebakan infinite loop dari Sesi 09: di sana break lupa ditulis = bug; di sini break adalah fitur yang sengaja dirancang di menu "Keluar". Kerangkanya hanya empat gerakan:

while True:
    print("1. Lihat  2. Tambah  3. Hapus  4. Keluar")
    pilih = input("Pilih menu: ").strip()
    if pilih == "4":
        print("Sampai jumpa!")
        break

Poin halus untuk ditekankan: pilih == "4" — string, bukan int. Menu tidak butuh konversi angka; strip() dari Sesi 13 menjaga agar " 4 " tetap terbaca. Dan elif untuk pilihan tak dikenal = else yang ramah: "menu nggak ada, coba lagi" — aplikasi tidak boleh crash hanya karena user salah ketik.

C. Satu Fungsi Satu Menu — Dapur yang Rapi

while True tadi adalah ruang tunggu; kekuatan aplikasi ada di dapurnya — fungsi-fungsi kecil dari Sesi 12: tampilkan(), tambah_tugas(), hapus_tugas(). Satu fungsi satu menu (satu tanggung jawab), dan mesin menu tinggal "menelepon dapur" sesuai pesanan. Manfaatnya konkret: menu rusak tidak menyentuh dapur, dapur bisa diuji sendiri-sendiri, dan — yang paling penting — kerangka ini persis Final Project (Sesi 16: 5 menu + statistik + file). Latihan hari ini = investasi dua minggu ke depan.

D. Error Itu Alarm, Bukan Aib

Tiga alarm paling sering hari ini: (1) menu tidak merespons — input tertaruh di luar loop, mesinnya diam karena tidak ada yang memberi perintah baru; (2) data "hilang" saat program direstart — bukan bug, itu memang umur list: hidup hanya selama program jalan (penyimpanan permanen dengan file dipelajari di Final Project); (3) hapus nomor yang tidak ada — cek dulu if nomor <= len(tugas) sebelum del, alarm IndexError dari Sesi 11 kembali berbunyi di tempat baru.

Catatan pengajar: sesi ini pemanasan Final Project (catatan kurikulum) — dorong struktur rapi (fungsi per menu) sejak menit pertama, bukan setelah kodenya kacau. Kriteria lulus hari ini: aplikasi jalan tanpa error & menangani beberapa kasus. Boleh tidak sempurna; tidak boleh kacau strukturnya. Untuk siswa yang stuck, distribusi menu berbeda: satu-satunya cara keluar loop adalah break yang ditulis — jangan beri kode jadi, beri kerangkanya.

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Brainstorm & Rancang di Kertas (20 menit)

Kelas pilih satu domain — Todo List (default) atau Kasir Warung Mini. Menit pertama tanpa laptop: di kertas, daftar fitur (lihat/tambah/hapus/keluar) + sketsa fungsi. Pertanyaan pemandu guru: "data apa yang disimpan? (list) / ada berapa menu? / fungsi apa saja yang dibutuhkan?" Hasil di kertas = alur yang diikuti saat coding — kebiasaan flowchart dari Sesi 01-02, sekarang dengan fungsi.

Langkah 2: Dapur Dulu — Fungsi Lihat & Tambah (15 menit)

Mulai dari fungsi, bukan menu. Dasar kode.py:

tugas = ["Matematika", "Fisika"]

def tampilkan(items):
    if not items:
        print("(kosong - belum ada tugas)")
        return
    for nomor, item in enumerate(items, 1):
        print(f"{nomor}. {item}")

def tambah_tugas(items):
    baru = input("Tugas baru: ").strip()
    if baru:
        items.append(baru)
        print("Ditambahkan:", baru)
    else:
        print("Tugas kosong, tidak jadi.")

Uji sebelum lanjut: panggil tampilkan(tugas) dan tambah_tugas(tugas) langsung. Dapur harus jalan sebelum ruang tunggu dibangun.

Langkah 3: Ruang Tunggu — Mesin Menu (15 menit)

Sekarang rakit menu di bawah file:

while True:
    print()
    print("=== TODO LIST ===")
    print("1. Lihat  2. Tambah  3. Hapus  4. Keluar")
    pilih = input("Pilih menu: ").strip()
    if pilih == "1":
        tampilkan(tugas)
    elif pilih == "2":
        tambah_tugas(tugas)
    elif pilih == "4":
        print("Sampai jumpa!")
        break
    else:
        print("Menu tidak ada, coba lagi.")

Uji menu 1, 2, 4, dan satu pilihan ngawur. Menu 3 (hapus) sengaja belum ada — sengaja: siswa menambahkannya sendiri di langkah berikut dengan pola yang sudah terlihat.

Langkah 4: Menu Hapus yang Aman (15 menit)

Minta siswa menulis sendiri mengikuti pola tambah_tugas:

def hapus_tugas(items):
    tampilkan(items)
    if not items:
        return
    nomor = int(input("Hapus nomor berapa? "))
    if 1 <= nomor <= len(items):
        dihapus = items.pop(nomor - 1)
        print("Terhapus:", dihapus)
    else:
        print("Nomor tidak ada.")

Lalu pasang elif pilih == "3": hapus_tugas(tugas) di menu. Diskusikan nomor - 1: user berhitung dari 1, Python dari 0. Untuk Kasir Warung: ganti "tugas" jadi barang + harga, tambah fitur total belanja (challenge statistik).

Langkah 5: Uji Skenario Penuh & Demo (15 menit)

Checklist uji sebelum demo: tambah tiga tugas → lihat → hapus nomor 2 → lihat lagi → keluar → jalankan ulang (data hilang — kenapa?). Setelah itu demo: 2-3 siswa memperlihatkan aplikasi di depan kelas + satu keputusan kode yang mereka banggakan. Umpan balik fokus struktur: "menu di loop, logika di fungsi".

Langkah 6: Penutup (10 menit)

Rangkuman: pola menu (list + while True + fungsi per fitur) adalah kerangka Final Project. Preview Sesi 15: AI-Assisted Coding — "minggu depan ada asisten yang bisa menulis kode untukmu; syaratnya kamu harus paham kode hari ini."

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

Kode lengkap per bagian ada di kode.py. Berikut solusi utuh mandiri yang bisa dijalankan: aplikasi Todo List dengan menu lengkap, termodular per fungsi, dengan output harapan di komentar:

# ============ SESI 14 - MINI PROJECT 2: TODO LIST ============
# Aplikasi menu: list sebagai data, while True sebagai mesin, fungsi per fitur.

tugas = ["Matematika", "Fisika"]   # data aplikasi - hidup selama program jalan

def tampilkan(items):
    if not items:
        print("(kosong - belum ada tugas)")
        return
    for nomor, item in enumerate(items, 1):
        print(f"{nomor}. {item}")

def tambah_tugas(items):
    baru = input("Tugas baru: ").strip()
    if baru:
        items.append(baru)
        print("Ditambahkan:", baru)
    else:
        print("Tugas kosong, tidak jadi.")

def hapus_tugas(items):
    if not items:
        print("(kosong - tidak ada yang bisa dihapus)")
        return
    tampilkan(items)
    nomor = int(input("Hapus nomor berapa? "))
    if 1 <= nomor <= len(items):
        dihapus = items.pop(nomor - 1)
        print("Terhapus:", dihapus)
    else:
        print("Nomor tidak ada.")

def cari_tugas(items, kata):
    hasil = []
    for item in items:
        if kata.lower() in item.lower():
            hasil.append(item)
    return hasil

while True:
    print()
    print("=== TODO LIST ===")
    print("1. Lihat  2. Tambah  3. Hapus  4. Cari  5. Keluar")
    pilih = input("Pilih menu: ").strip()
    if pilih == "1":
        tampilkan(tugas)
    elif pilih == "2":
        tambah_tugas(tugas)
    elif pilih == "3":
        hapus_tugas(tugas)
    elif pilih == "4":
        kata = input("Cari kata: ").strip()
        hasil = cari_tugas(tugas, kata)
        if hasil:
            print("Ketemu:")
            tampilkan(hasil)
        else:
            print("Tidak ada yang cocok.")
    elif pilih == "5":
        print("Sampai jumpa!")
        break
    else:
        print("Menu tidak ada, coba lagi.")

Contoh jalannya program:

=== TODO LIST ===
1. Lihat  2. Tambah  3. Hapus  4. Cari  5. Keluar
Pilih menu: 1
1. Matematika
2. Fisika

=== TODO LIST ===
1. Lihat  2. Tambah  3. Hapus  4. Cari  5. Keluar
Pilih menu: 2
Tugas baru:   Kimia
Ditambahkan: Kimia

=== TODO LIST ===
1. Lihat  2. Tambah  3. Hapus  4. Cari  5. Keluar
Pilih menu: 4
Cari kata: i
Ketemu:
1. Matematika
2. Fisika
3. Kimia

=== TODO LIST ===
1. Lihat  2. Tambah  3. Hapus  4. Cari  5. Keluar
Pilih menu: 5
Sampai jumpa!

Kunci pembahasan: items.pop(nomor - 1) mengonversi hitungan user ke indeks Python; cari_tugas membandingkan versi lower() agar pencarian tak peduli kapitalisasi (Sesi 13); menu "4" sebelumnya latihan cari dari kode.py kini jadi fitur asli. Versi Kasir Warung Mini: ganti nama variabel jadi barang + harga, menu tambah menyimpan dua-duanya, tambah menu "Total belanja" yang menjumlahkan dengan pola akumulasi Sesi 09.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
Menu hanya tampil sekali / program berhenti sendiri input("Pilih menu: ") tertulis di luar while True, atau break terpicu di cabang yang salah. Cek posisi: seluruh menu + input harus di dalam loop. break hanya di cabang "Keluar".
Mengetik 4 tapi menu tetap jalan terus Pembanding pakai angka (pilih == 4) padahal input() menghasilkan string "4". Bandingkan string: pilih == "4". Menu tidak butuh int() — justru lebih aman dari input tak dikenal.
Tugas terhapus salah — bukan yang diminta user Lupa - 1: user hitung dari 1, Python dari 0; atau nomor tak dicek dulu (IndexError dari Sesi 11). Polakan: tampilkan daftar dulu, cek 1 <= nomor <= len(items), baru pop(nomor - 1).
Data hilang saat program dijalankan ulang List hidup hanya selama program jalan — bukan bug (catatan kurikulum: penyimpanan file adalah materi Final Project). Normalisasi: jelaskan umur data (RAM). Siswa penasaran boleh diberi teaser open() — tapi jangan didalami hari ini.
Kode menu panjang dan menyulitkan debugging Logika fitur (tambah/hapus) ditulis langsung di dalam loop, bukan di fungsi. Terapkan prinsip modular (Sesi 12): pindahkan tiap fitur ke fungsi sendiri; loop hanya memanggil. Refactor bersama di depan kelas.
ValueError saat hapus: input nomor berisi huruf int(input(...)) menerima teks bukan angka. Validasi ringan hari ini: cek nomor.isdigit() sebelum int(). Penanganan penuh (try-except) menjadi materi Final Project.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 15)

Aplikasi hari ini lahir sepenuhnya dari tangan kalian — dan itu justru bekal untuk minggu depan: Introduction to AI-Assisted Coding. Kalian akan menyuruh AI menulis kode, lalu justru di sanalah terasa kenapa paham list, fungsi, dan menu itu wajib: kamu tidak bisa memeriksa pekerjaan asisten kalau tidak pernah mengerjakannya sendiri. Minggu depan aturannya satu: boleh minta bantuan, wajib paham.

# Prompt kamu minggu depan, AI yang menulis, kamu yang menguji:
# "Buatkan fungsi Python yang menerima list angka
#  dan mengembalikan rata-ratanya."
# ...lalu tugas kamu: jalankan, temukan bug-nya (kalau ada), dan jelaskan.

Simpan baik-baik aplikasi menu kalian — pola persis ini (menu + list + fungsi) yang akan dikembangkan jadi Final Project dengan file penyimpanan di Sesi 16.