Ekskul CSSE · SMAS St. John — BINUSPertemuan 7
07
Logika · Sesi 07 — Conditional Programming
Conditional
Programming

Program yang bisa milih jalan — True lewat sini, False belok sana. Mesin keputusan pertamamu.

TUJUAN 01
Pakai if/elif/else — titik dua & indentasi yang benar
TUJUAN 02
Pahami urutan cabang: sempit ke longgar — dan error senyapnya
TUJUAN 03
Susun kondisi gabungan & nested if untuk kasus nyata
Target Hari Ini

Hari ini programmu belajar memutuskan

Tujuan Pembelajaran
  • Menulis if/elif/else lengkap: titik dua + blok menjorok
  • Menjelaskan kenapa urutan cabang menentukan hasil
  • Menggabungkan dua syarat dengan and/or dari Sesi 06
  • Membaca & menulis nested if — keputusan dalam keputusan
if / elif / elseindentasi = sintaksand · orerror senyap

* cabang = satu jalan keputusan · nested = bersarang, ada di dalam · error senyap = jalan tanpa error tapi hasil salah.

?
Kenapa penting?

Game bilang "kamu menang", ATM keluar uang, rapor jadi A — semuanya karena program memilih jalan.

Analogi hari ini

if = petugas gerbang — cek syarat satu per satu berurutan, cabang pertama yang cocok itulah yang dipakai.

Sisanya tidak dilihat lagi — makanya urutan segalanya.

Sebelum gas — minggu lalu kamu ndapetin apa?

Rekap Sesi 06 · Operators & Expressions

Yang sudah kamu pegang
  • 7 operator aritmatika — + - * / // % **
  • Perbandingan menghasilkan boolean — True/False
  • and/or/not — merangkai pertanyaan
  • Ragu? Pakai kurung — prioritas itu urutan eksekusi

Minggu lalu programmu menghasilkan True dan False — tapi belum memakainya. Hari ini jawaban itu akhirnya dipakai: True jalur A, False jalur B.

Kuis kilat — coba jawab dulu!
AApa hasilnya 17 % 2 == 0?
BApa bedanya = dan ==?
jawabannya A = False (17 ganjil) · B = "= isi, == tanya". Dua jawaban itu persis bahan bakar percabangan hari ini.
!

Peta perjalanan: kamu di barisan ke-7 dari 17 — sudah 41% perjalanan!

Satu pertanyaan, dua nasib — itulah if

if — gerbang pertamamu

Code — satu cabang
hujan = True
if hujan:
    print("Bawa payung!")
print("Langkah berikutnya jalan terus.")
Dua aturan sintaks wajib
titik duaakhir baris kondisi — selalu
indentasibaris di dalam blok menjorok 4 spasi
Output
Bawa payung!
Langkah berikutnya jalan terus.

Kenapa baris terakhir selalu tercetak? Karena dia tidak menjorok — di luar keputusan, kembali jalan terus.

→

Indentasi di Python bukan kerapian — itu sintaks. Dibongkar habis di slide 08.

Dunia nyata jarang satu pintu — ini dua

if/else — True jalur A, False jalur B

Code — dua pilihan
umur = int(input("Umur: "))
if umur >= 17:
    print("Sudah boleh membuat KTP")
else:
    print("Belum cukup umur")
Sambungan ke Sesi 06

umur >= 17 adalah pertanyaan yang hasilnya boolean — minggu lalu cuma dicetak, hari ini dipakai untuk memilih jalan.

Output
Umur: 16
Belum cukup umur
Pola bacanya

if = syaratnya cocok → blok atas jalan · else = "kalau semua gagal, lewat sini" — tanpa syarat, tanpa kondisi.

?

Tapi hidup sering tiga pilihan, empat, lima — predikat rapor aja ada 5. Butuh senjata berikutnya: elif.

Banyak pilihan — petugas cek berurutan, cabang pertama menang

elif — banyak pintu, urutan menentukan

Code — program grading nilai
skor = 85
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)
Cara kerjanya — pelan-pelan
  • 85 >= 90? False — lewat
  • 85 >= 75? True — grade = "B (Baik)"
  • Cabang di bawahnya tidak dilihat lagi

Uji 4 kasus: 95 → A · 85 → B · 60 → C (tepat di batas!) · 30 → E.

→

Perhatikan urutan syaratnya: tinggi ke rendah — sempit ke longgar. Kenapa harus begitu? Slide berikutnya jawab dengan drama.

Kode ini jalan tanpa error — tapi hasilnya salah. Kok bisa?

Urutan terbalik — error paling licik

Code — urutan LONGGAR dulu (salah!)
skor = 95
if skor >= 60:        # ini kena duluan!
    grade = "C (Cukup)"
elif skor >= 90:
    grade = "A (Sangat Baik)"
print(grade)
Outputnya
C (Cukup)

Nilai 95 dapat C. Tidak ada error apa pun — programnya "sukses".

Kenapa ini bahaya

95 >= 60 itu True — cabang pertama langsung menang, sisanya tak dilihat. Ini error senyap: program jalan, keputusannya salah.

URUTAN SALAH
60 dulu → C
URUTAN BENAR
90 dulu → A
!

Aturan emas: tulis syarat dari paling sempit (tinggi) ke paling longgar (rendah), else jadi bantalan terakhir. Dan uji beberapa kasus, bukan satu.

Di bahasa lain cuma kerapian — di Python, salah spasi = salah logika

Indentasi itu sintaks, bukan gaya

Code — satu spasi beda, nasib beda
hujan = True
if hujan:
    print("Bawa payung!")     # di dalam if
print("Keluar rumah.")          # DI LUAR if
Analogi paragraf

Indentasi itu paragraf — satu paragraf satu ide, dan Python membacanya secara harfiah. Baris yang balik ke kiri berarti "keluar dari keputusan".

Aturan mainnya
  • 4 spasi, konsisten — satu aturan seisi file
  • Jangan campur tab & spasi — kelihatan rapi, dibaca beda
  • Blok kosong setelah if → IndentationError

VS Code bisa bantu: View → Indent Guides — garis bantu biar blok kelihatan.

!

Versi liciknya menyusul di slide jebakan: baris yang salah menjorok tidak error — cuma diam-diam keluar dari keputusan.

Giliran kamu — petugas gerbangnya belum jalan

Tugas 1 · Grading nilai + status

Kerjakan berurutan — 3 level
  1. Grading dasar — input skor (int), keluarkan predikat A/B/C/D/E pakai if/elif/else urutan tinggi → rendah
  2. Uji 4 kasus — 95, 85, 60 (tepat di batas!), 30. Semuanya harus jawab benar
  3. Retakkan sendiri — balik urutan cabangnya (60 di atas), Run dengan 95, saksikan error senyapnya
Petunjuk

Rumuskan dulu sebagai kalimat: "jika minimal 90 tulis A; tidak, tapi minimal 75 tulis B; ..." — lalu terjemahkan baris demi baris.

Contoh jalannya program
Skor: 85
Skor: 85 - Predikat: B (Baik)
⏱

Waktu: 15 menit. Level 3 itu eksperimen resmi — error senyap harus kamu alami, bukan cuma diceritakan.

Keputusan jarang sendirian — ini dia dua cara menyusunnya

Kondisi gabungan & nested if

Cara 1 — satu kondisi gabungan
nilai_ujian = 82
kehadiran = 85
if nilai_ujian >= 75 and kehadiran >= 80:
    print("Lulus Semester")
else:
    print("Belum Lulus")

Pertanyaan digabung jadi satu — dua-duanya wajib benar (and dari Sesi 06).

Cara 2 — nested if (keputusan dalam keputusan)
if nilai_ujian >= 75:
    print("Kamu Lulus!")
    if nilai_ujian >= 90:
        print("Predikat Pujian!")
    else:
        print("Pertahankan prestasimu.")
else:
    print("Ikuti remedial.")

Baca indentasinya: if dalam milik blok if luar — dua tingkat menjorok, dua tingkat keputusan.

→

Hasilnya mirip, kepribadiannya beda: gabungan = ringkas, satu pertanyaan besar · nested = bisa kasih pesan berbeda untuk tiap tingkat. Pilih sesuai kebutuhan pesanmu.

Level up — kasir dari Sesi 06 sekarang punya tingkatan

Tugas 2 · Kasir diskon bertingkat

Kerjakan berurutan — 2 level
  1. Diskon bertingkat — beli >= 10 diskon 50% · >= 5 diskon 20% · selain itu tanpa diskon. Hitung total, potongan, total_bayar, kembalian
  2. Uji 3 kasus — 12 buah (diskon 50%), 7 buah (20%), 3 buah (tanpa diskon)
Kerangka mulai
if jumlah >= 10:
  persen_diskon = 0.50
elif jumlah >= 5:
  persen_diskon = 0.20
else:
  persen_diskon = 0.0
Contoh jalannya program
Harga satuan: 3000 Jumlah beli: 12 ----------------------- Total kotor : 36000 Status promo : Diskon 50% (Promo Grosir) Potongan : 18000 Total bayar : 18000
⏱

Waktu: 15 menit. Ini studi kasus kumulatif: input (Sesi 05) + operator (06) + keputusan (07) — program kecil yang sudah lengkap.

Tantangan terakhir — pilih satu jalurmu

Challenge · Kabisat atau kelulusan

Misi A — cek tahun kabisat

Aturannya: habis dibagi 4, kecuali habis dibagi 100 — kecuali juga habis dibagi 400. Satu kondisi gabungan: tahun % 4 == 0 and (tahun % 100 != 0 or tahun % 400 == 0)

2000 → kabisat
1900 → bukan
2024 → kabisat
Misi B — kelulusan dua syarat

Lulus = nilai >= 75 and kehadiran >= 80. Tapi tiap kegagalan dapat pesan berbeda — nilai kurang, kehadiran kurang, atau dua-duanya. Itu kerja elif bertingkat atau nested if.

82 & 90 → Lulus
60 & 90 → nilai kurang
82 & 60 → kehadiran kurang
Waktu 15 menit · pilih SATU misi, kerjakan tuntas. Baru belajar kondisi gabungan 30 menit lalu? Bagus — Misi A adalah tes pemahaman terbaikmu.
Gimana cara menyelesaikannya?

Pembahasan Challenge — kode lengkap

Solusi A — tahun kabisat
tahun = 2024
kabisat = (tahun % 4 == 0
           and (tahun % 100 != 0
                or tahun % 400 == 0))
if kabisat:
    print(tahun, "kabisat")
else:
    print(tahun, "bukan kabisat")

Kurung di dalam penting — or dievaluasi setelah and. Tanpa kurung, logikanya berubah total. Ragu = kurung.

Solusi B — kelulusan pesan bertingkat
nilai, hadir = 60, 90
if nilai >= 75 and hadir >= 80:
    print("LULUS, kerja bagus!")
elif nilai < 75 and hadir < 80:
    print("Dua-duanya belum cukup")
elif nilai < 75:
    print("Nilaimu belum cukup")
else:
    print("Kehadiranmu kurang")

Urutannya tetap sempit → longgar: kasus paling spesifik (dua-duanya gagal) dicek sebelum kasus tunggal.

!

Metode yang sama dipakai semua keputusan: rumuskan sebagai kalimat dulu → urutkan sempit ke longgar → uji beberapa kasus. Kamu bukan menghafal cabang — kamu memiliki mesin keputusan.

Cabangmu nggak jalan padahal kelihatan benar? Mungkin kena salah satu ini

Kotak masalah — 4 jebakan percabangan

Jebakan 01
Lupa titik dua → SyntaxError
if skor >= 90        # ← titik dua hilang
    print("A")

Kalimat kondisi Python selalu ditutup :. Scan semua baris if milikmu sendiri sebelum panggil guru.

Jebakan 02
Indentasi campur → IndentationError
if hujan:
    print("A")      # 4 spasi
      print("B")    # 6 spasi — error!

Satu blok = satu kedalaman. 4 spasi konsisten, jangan campur tab & spasi — kelihatan sama, dibaca beda.

Jebakan 03
Urutan terbalik (longgar dulu)
if skor >= 60:   # kena duluan!
    grade = "C"
elif skor >= 90: # tak pernah dicapai
    grade = "A"

Error senyap — nilai 95 dapat C, tanpa pesan error apa pun. Urutan wajib sempit → longgar.

Jebakan 04
Baris tidak menjorok — keputusan hilang diam-diam
if nilai >= 75:
    print("Masuk blok")
print("LULUS")   # DI LUAR if — selalu jalan!

Jalan tanpa error, tapi LULUS tercetak untuk semua nilai. Deteksinya satu: uji dengan 2 input berbeda.

Bonus: semua nilai dapat E atau semua A? Kemungkinan kondisinya skor = 90 (mengisi) bukan skor >= 90 (bertanya). Cetak print(skor >= 90) untuk melihat jawaban boolean-nya langsung.

Rangkuman · Yang kita bawa pulang

5 poin hari ini — mesin keputusan milikmu

01
if/elif/else — petugas gerbang cek berurutan; cabang pertama yang True menang
02
Urutan sempit → longgar — syarat tinggi dulu, else bantalan terakhir; terbalik = error senyap
03
Indentasi itu sintaks — 4 spasi konsisten; salah menjorok = logika berubah tanpa bunyi
04
and gabung dua syarat · nested if untuk pesan bertingkat — pilih sesuai kebutuhan
05
Uji beberapa kasus — batas atas, tengah, tepat di batas, bawah semua: satu percobaan tidak cukup
Programmu resmi bisa memutuskan Next → Mini Project 1
Next & Referensi — langkah selanjutnya

Minggu depan:
Mini Project 1

Sesi 08 — Mini Project 1: Decision Making

Tidak ada materi baru — empat bekal 4 minggu terakhir digabung jadi satu program pengambil keputusan utuh.

Variabel & input + operator + percabangan — dirancang flowchart dulu, baru coding, diuji beberapa skenario, lalu demo. Ini proyek pertamamu.

intip:
nama = input("Nama: ")
nilai = int(input("Nilai: "))
if nilai >= 75 and hadir >= 80:
  print(f"{nama}: LULUS!")
flowchart duluuji skenariodemo & feedback
PR iseng (opsional)
  • Tes diri: nilai 75 masuk predikat apa? jawab dulu, baru Run
  • Bikin penentu bilangan positif/nol/negatif — tiga cabang
  • Tidak ada laptop? Tulis flowchart kelulusan di kertas — minggu depan kepakai langsung
Sampai jumpa di Sesi 08! if · elif · else · uji beberapa kasus