Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)
if/elif/else, indentasi sebagai bagian sintaks Python, kondisi gabungan and/or, nested if, dan program konversi nilai angka menjadi predikat huruf.Challenge tahun kabisat: tahun % 4 == 0 and (tahun % 100 != 0 or tahun % 400 == 0) — satu kondisi gabungan untuk aturan yang di dalamnya punya pengecualian.
if dengan sintaks lengkap: titik dua di akhir kondisi dan blok yang menjorok.elif berurutan dan else sebagai bantalan terakhir.if/elif menentukan hasil (cabang pertama yang True menang).and/or.IndentationError sebagai alarm "bloknya tidak jelas" dan memperbaikinya sendiri.Hari ini siswa menempuh barisan ke-7 dari 17 — 41% perjalanan:
| Waktu | Blok | Aktivitas |
|---|---|---|
| 10' | Pembuka | Cover sesi, baca tujuan bersama, rekap Sesi 06 (tanya: "hasil perbandingan tipenya apa? = vs ==?") |
| 15' | Kasus pembuka | Kasus nyata tanpa kode: sistem penilaian A/B/C/D di rapor — siswa rumuskan aturannya dulu sebagai kalimat, baru jadi kondisi |
| 25' | Materi 1 | Paparan if/else/elif + indentasi sebagai sintaks; demo urutan cabang menentukan hasil |
| 20' | Praktik | Program kategorisasi nilai siswa: input angka → predikat huruf + keterangan lulus/tidak |
| 20' | Challenge | Level: cek tahun kabisat atau cek kelulusan (nilai + kehadiran) — pakai kondisi gabungan & nested |
| 10' | Penutup | Rangkuman 5 poin, preview Sesi 08 (Mini Project 1), Q&A singkat |
if = satpam yang memeriksa. Satpam melihat satu kondisi: "umur 17 ke atas?" Ya — boleh masuk. Tidak — dihalangi. Sederhana. Tapi kehidupan nyata jarang satu pertanyaan: petugas gerbang mengecek berurutan — kartu pelajar? tiket online? daftar tamu? — dan cabang pertama yang cocok itulah yang dipakai, sisanya tidak dilihat lagi. Itu persis if/elif/else: if pertanyaan pertama, elif pertanyaan berikutnya, else pintu terakhir "kalau semua gagal, masuk lewat sini".
Ini poin yang paling sering bikin program grading salah: menulis if skor >= 60 di atas if skor >= 90. Nilai 95 tertangkap cabang 60 duluan dan tercetak "Cukup". Aturannya: tulis dari syarat paling sempit (tinggi) ke paling longgar (rendah), dan else menampung sisanya. Karena Python berhenti memeriksa di cabang yang pertama True, urutan bukan gaya-gayaan — itu logika. Demo kecil yang ampuh: tampilkan solusi "salah urutan" yang jalan tanpa error tapi hasilnya salah, lalu tanyakan kenapa tidak ada error apa pun.
Di bahasa lain, menjorok hanyalah kerapian. Di Python, indentasi menentukan kode mana yang "di dalam" blok if — salah menjorok = salah logika atau langsung IndentationError. Ini Catatan Pengajar resmi kurikulum, dan sengaja diulang di sini: 4 spasi, konsisten, jangan campur tab dan spasi. Analogi: indentasi itu paragraf — satu paragraf satu ide, dan Python membaca paragraf itu secara harfiah. Baris yang balik ke kiri berarti "keluar dari keputusan", kembali jalan terus.
Alarm hari ini: SyntaxError dari titik dua yang lupa, IndentationError dari blok kosong atau spasi tak konsisten, dan logika salah tanpa error — yang terakhir paling berbahaya dan paling patut dilatih. Kuncinya uji kasus: program grading yang benar harus menjawab benar untuk beberapa angka (95, 85, 65, 30), bukan satu. Kebiasaan "coba beberapa input sebelum bilang selesai" inilah yang nanti dipakai di Mini Project 1 minggu depan.
Tanpa kode dulu: tanya "rapormu menjelaskan angka berapa itu A?" Rumuskan bersama sebagai kalimat bersyarat: "Jika nilai minimal 90, predikat A; jika tidak, tapi minimal 75, predikat B; ...". Lalu terjemahkan kalimat itu ke kode satu cabang:
hujan = True
if hujan:
print("Bawa payung!")
print("Langkah berikutnya jalan terus.")
Bedah: kenapa baris terakhir selalu tercetak? Karena tidak menjorok — di luar keputusan.
umur = int(input("Umur: "))
if umur >= 17:
print("Sudah boleh membuat KTP")
else:
print("Belum cukup umur untuk membuat KTP")
angka = 17
if angka % 2 == 0:
print(angka, "adalah bilangan Genap")
else:
print(angka, "adalah bilangan Ganjil")
Sambung ke Sesi 06: angka % 2 == 0 adalah pertanyaan yang hasilnya boolean — hari ini jawabannya akhirnya dipakai.
Bangun bersama program inti sesi, lalu uji dengan 4 kasus:
skor = int(input("Skor: "))
if skor >= 90:
grade = "A (Sangat Baik)"
elif skor >= 75:
grade = "B (Baik)"
elif skor >= 60:
grade = "C (Cukup)"
elif skor >= 40:
grade = "D (Kurang)"
else:
grade = "E (Tidak Lulus)"
print("Skor:", skor, "- Predikat:", grade)
Uji: 95 → A, 85 → B, 60 → C (tepat di batas!), 30 → E. Lalu balik urutan cabangnya (60 di atas), jalankan dengan 95, dan tanyakan: "kok C, padahal tidak ada error?"
Dua cara berbeda untuk logika yang mirip — bandingkan keduanya:
nilai_ujian = 82
kehadiran = 85
# Cara 1: satu kondisi gabungan
if nilai_ujian >= 75 and kehadiran >= 80:
print("Lulus Semester")
else:
print("Belum Lulus")
# Cara 2: nested if
if nilai_ujian >= 75:
print("Kamu Lulus!")
if nilai_ujian >= 90:
print("Predikat Pujian!")
else:
print("Pertahankan prestasimu.")
else:
print("Ikuti remedial.")
Bedah indentasi Cara 2 baris demi baris: if yang mana milik siapa?
Challenge pilihan: (a) tahun kabisat, atau (b) kelulusan dua syarat dengan pesan berbeda untuk tiap kegagalan. Bedah 1-2 solusi di depan kelas, rangkum 5 poin: if/elif/else berurutan, cabang pertama yang True menang, urutan sempit→longgar, indentasi = sintaks, uji beberapa kasus. Preview Sesi 08: semua bekal ini digabung jadi proyek pertama.
Solusi utuh mandiri — menjalankan demo bertahap lalu studi kasus kumulatif kasir diskon bertingkat. Run langsung, output sesuai komentar:
# Sesi 07 - Conditional Programming
# Demo if/elif/else + studi kasus kasir diskon bertingkat
# --- Bagian 1: if tunggal ---
hujan = True
print("--- 1. if Tunggal ---")
if hujan:
print("Hari ini hujan: Bawa payung!")
print("Langkah berikutnya jalan terus.")
# --- Bagian 2: if - else (dua pilihan) ---
umur = 16
print("--- 2. if - else ---")
if umur >= 17:
print("Umur", umur, "-> Sudah boleh membuat KTP")
else:
print("Umur", umur, "-> Belum cukup umur untuk membuat KTP")
angka = 17
if angka % 2 == 0:
print(angka, "adalah bilangan Genap")
else:
print(angka, "adalah bilangan Ganjil")
# --- Bagian 3: grading nilai (if - elif - else) ---
# Cabang pertama yang True dieksekusi, sisanya dilewati.
skor = 85
print("--- 3. Grading Nilai ---")
if skor >= 90:
grade = "A (Sangat Baik)"
elif skor >= 75:
grade = "B (Baik)"
elif skor >= 60:
grade = "C (Cukup)"
elif skor >= 40:
grade = "D (Kurang)"
else:
grade = "E (Tidak Lulus)"
print("Skor:", skor, "-> Predikat:", grade) # B (Baik)
# --- Bagian 4: logika and / or ---
nilai_ujian = 82
kehadiran_persen = 85
print("--- 4. Logika and / or ---")
if nilai_ujian >= 75 and kehadiran_persen >= 80:
print("Status: Lulus Semester (Nilai & Kehadiran mencukupi)")
else:
print("Status: Belum Lulus (Salah satu syarat belum terpenuhi)")
# --- Bagian 5: nested if ---
print("--- 5. Nested if ---")
if nilai_ujian >= 75:
print("Kamu Lulus!")
if nilai_ujian >= 90:
print("Hebat! Kamu mendapatkan Predikat Pujian.")
else:
print("Pertahankan prestasimu.")
else:
print("Silakan ikuti jadwal remedial.")
# --- Bagian 6: studi kasus kumulatif - kasir diskon bertingkat ---
print("--- 6. Kasir Diskon Bertingkat ---")
nama_barang = input("Nama barang: ") # contoh: Pulpen
harga = int(input("Harga satuan: ")) # contoh: 3000
jumlah = int(input("Jumlah beli: ")) # contoh: 12
uang_bayar = int(input("Uang bayar: ")) # contoh: 40000
total_kotor = harga * jumlah # 36000
# Persentase diskon berdasar jumlah beli (urutan: tinggi ke rendah!)
if jumlah >= 10:
persen_diskon = 0.50
ket_diskon = "Diskon 50% (Promo Grosir)"
elif jumlah >= 5:
persen_diskon = 0.20
ket_diskon = "Diskon 20% (Promo Spesial)"
else:
persen_diskon = 0.0
ket_diskon = "Tidak ada diskon"
potongan = int(total_kotor * persen_diskon)
total_bayar = total_kotor - potongan
kembalian = uang_bayar - total_bayar
print(f"Barang : {nama_barang}")
print(f"Total kotor : {total_kotor}")
print(f"Status promo : {ket_diskon}")
print(f"Potongan : {potongan}")
print(f"Total bayar : {total_bayar}")
print(f"Kembalian : {kembalian}")
# Output bagian 6 kalau diisi seperti contoh:
# Barang : Pulpen
# Total kotor : 36000
# Status promo : Diskon 50% (Promo Grosir)
# Potongan : 18000
# Total bayar : 18000
# Kembalian : 22000
Tiga hal yang layak disorot saat membahas: (1) grading nilai dan diskon bertingkat memakai strategi sama — urutan syarat dari tinggi ke rendah, satu jalur yang menang; (2) else tidak punya kondisi karena itu "sisanya"; (3) Bagian 6 adalah gabungan Sesi 05 (input), Sesi 06 (operator), dan hari ini (keputusan) — proyek kecil yang sudah lengkap.
| Masalah | Penyebab | Tindakan Perbaikan |
|---|---|---|
SyntaxError: expected ':' |
Titik dua di akhir baris if/elif/else tertinggal. |
Bedah satu contoh bersama: kalimat kondisi Python selalu ditutup :. Minta siswa scan semua baris if-nya sendiri sebelum memanggil guru. |
IndentationError: expected an indented block |
Ada if ...: tapi baris di bawahnya tidak menjorok (atau bloknya kosong). |
Kembalikan ke "paragraf": isi keputusan harus menjorok 4 spasi. Tunjukkan garis indentasi di VS Code (View → Indent Guides). |
| Program jalan tanpa error tapi hasil grading salah | Urutan if/elif terbalik — syarat longgar (>= 60) di atas syarat sempit (>= 90). |
Tracing dengan skor 95: cabang mana yang kena duluan? Perbaiki urutan: sempit → longgar, else paling bawah. |
| Semua nilai tercetak "E" atau semua "A" | Kondisi ditulis skor = 90 (assignment) bukan skor >= 90, atau operator perbandingan salah arah. |
Cetak skor dan kondisinya satu per satu (print(skor >= 90)) untuk melihat jawaban boolean-nya langsung. |
| Baris "Kamu Lulus!" tidak muncul padahal nilai cukup | Barisnya tidak menjorok ke dalam blok if — Python anggap di luar keputusan (jalan tanpa error!). |
Bandingkan indentasi baris itu dengan baris di dalam if lain. Ini error senyap — latih siswa uji dengan 2 input berbeda, bukan satu. |
NameError: name 'skor' is not defined |
Variabel dipakai di kondisi sebelum diisi, atau input()-nya belum dijalankan (belum run ulang). |
Cek urutan baris: input dulu di atas, baru if. Ingatkan: tiap kali kode diubah, run ulang — file tidak "menyala sendiri". |
if/elif/else lengkap dengan titik dua dan indentasi 4 spasi yang konsisten.and/or untuk menggabungkan dua syarat dan bisa memilih mana yang tepat.IndentationError, siswa menemukan sendiri baris yang salah menjorok.Minggu depan tidak ada materi baru — dan justru itu poinnya: Mini Project 1. Semua bekal empat minggu terakhir (variabel, input, operator, percabangan) kamu satukan jadi satu program pengambil keputusan utuh: rancang alurnya, tulis kodenya, uji beberapa skenario, lalu tunjukkan. Program grading hari ini adalah versi mungilnya — minggu depan kamu yang menentukan aturannya.
# Teaser: satu program, banyak keputusan
nama = input("Nama: ")
nilai = int(input("Nilai: "))
hadir = int(input("Kehadiran (%): "))
if nilai >= 75 and hadir >= 80:
print(f"{nama}: LULUS, kerja bagus!")
else:
print(f"{nama}: belum lulus - pantang menyerah!")
Mini Project 1 adalah titik jawab: siswa yang menguasai hari ini akan langsung lihat bekalnya berpadu; siswa yang masih ragu harus didampingi individual minggu depan sebelum utang konsep menumpuk.