Bab 7 — Kondisional: Mengajari Program Mengambil Keputusan

Seri B2 — Fondasi Bahasa Python

CatatanDi bab ini, Anda akan:
  • Memakai if, elif, dan else supaya program memilih jalan sendiri
  • Memahami indentasi (menjorok), aturan penting Python
  • Memilih satu dari banyak kemungkinan dengan match dan case
  • Menghindari error pembagian nol yang Anda temui di Bab 6
  • Membuat penentu status kolam ikan

Semua skrip bab ini ada di folder kode/bab07/. Di versi web, Anda juga bisa mengunduh semuanya sekaligus (zip).

Di Bab 6, program Anda bisa menjawab Benar atau Salah. Tetapi jawaban itu belum dipakai untuk apa-apa. Di bab ini, jawaban itu menjadi keputusan: jika ikan sudah cukup berat, maka panen; kalau tidak, tunggu. Ini persis bahan pilihan dari Bab 2.

if: kerjakan hanya bila syaratnya benar

01_if_dasar.py
# Bab 7 - if: kerjakan hanya bila syaratnya benar
bobot_g = 520

if bobot_g >= 500:
    print("Ikan siap panen")
    print("Catat di buku panen")

print("Pemeriksaan selesai")   # tanpa menjorok: selalu dikerjakan
Ikan siap panen
Catat di buku panen
Pemeriksaan selesai

Perhatikan tiga hal:

  1. Setelah syarat ada tanda titik dua :.
  2. Baris yang menjadi isi if menjorok ke dalam (di buku ini 4 spasi). Dua baris print yang menjorok hanya dikerjakan bila syaratnya benar.
  3. Baris terakhir tidak menjorok, sehingga dikerjakan selalu, entah syaratnya benar atau salah.
CatatanINGAT

Di Python, indentasi bukan hiasan: ia menunjukkan baris mana yang menjadi bagian dari if. Bahasa lain memakai kurung kurawal; Python memakai jorokan. Pakai 4 spasi secara konsisten.

else: jalan kedua

Bagaimana kalau syaratnya salah? Tambahkan else (“kalau tidak”):

02_if_else.py
# Bab 7 - if ... else: dua jalan
ph_air = 5.8

if ph_air < 6:
    print("pH terlalu rendah: tambahkan kapur")
else:
    print("pH aman")
pH terlalu rendah: tambahkan kapur

Nilai 5.8 kurang dari 6, jadi jalan if dipilih. Hanya satu dari dua jalan yang dikerjakan, tidak pernah keduanya.

elif: banyak jalan

Kadang pilihannya lebih dari dua. elif (kependekan dari else if, “kalau tidak, jika…”) menyambung syarat berikutnya:

%%{init: {"flowchart": {"diagramPadding": 40}}}%%
flowchart TD
  A(["Bobot sapi"]) --> B{"500 kg atau lebih?"}
  B -- "Ya" --> K1["Kelas A"]
  B -- "Tidak" --> C{"400 kg atau lebih?"}
  C -- "Ya" --> K2["Kelas B"]
  C -- "Tidak" --> D{"300 kg atau lebih?"}
  D -- "Ya" --> K3["Kelas C"]
  D -- "Tidak" --> K4["Belum layak jual"]

Alur memilih kelas sapi: syarat diperiksa dari atas, berhenti di syarat pertama yang benar.

03_elif.py
# Bab 7 - if ... elif ... else: banyak jalan (angka contoh untuk latihan)
bobot_kg = 450

if bobot_kg >= 500:
    kelas = "Kelas A"
elif bobot_kg >= 400:
    kelas = "Kelas B"
elif bobot_kg >= 300:
    kelas = "Kelas C"
else:
    kelas = "Belum layak jual"

print(f"Sapi {bobot_kg} kg masuk: {kelas}")
Sapi 450 kg masuk: Kelas B

Python memeriksa syarat dari atas ke bawah, dan berhenti di syarat pertama yang benar. Karena 450 ≥ 400 tetapi bukan ≥ 500, hasilnya Kelas B.

PeringatanAWAS

Urutan syarat penting. Kalau Anda menulis bobot_kg >= 300 lebih dulu, sapi 450 kg akan langsung masuk Kelas C, karena 450 ≥ 300 juga benar. Susun dari syarat yang paling ketat.

TipTIPS

Angka batas kelas di contoh ini hanya angka latihan. Dalam proyek nyata, simpan batas semacam itu dalam variabel bernama jelas (misalnya batas_kelas_a_kg) supaya mudah diubah di satu tempat.

Menggabungkan syarat

Operator and, or, dan not dari Bab 6 boleh dipakai langsung di dalam if:

04_syarat_gabungan.py
# Bab 7 - Syarat gabungan dengan and dan or
diameter_cm = 45
tinggi_m = 20
sehat = True

if diameter_cm >= 40 and sehat:
    print("Pohon layak ditebang")
elif tinggi_m > 25 or not sehat:
    print("Pohon perlu diperiksa dulu")
else:
    print("Pohon dibiarkan tumbuh")
Pohon layak ditebang

Telusuri: diameter 45 ≥ 40 dan pohon sehat, jadi syarat pertama benar dan dua syarat lainnya tidak diperiksa.

Menjaga program dari error

Di Bab 6 Anda melihat ZeroDivisionError. Kini kita bisa mencegahnya: periksa dulu sebelum membagi.

05_cek_bagi_nol.py
# Bab 7 - Menghindari ZeroDivisionError dari Bab 6
jumlah_ikan = 1250
jumlah_kolam = 0

if jumlah_kolam == 0:
    print("Jumlah kolam 0: pembagian dibatalkan")
else:
    print(f"Ikan per kolam: {jumlah_ikan // jumlah_kolam}")
Jumlah kolam 0: pembagian dibatalkan

Pola “periksa dulu, baru kerjakan” ini akan sering Anda pakai. Bab 12 mengajarkan cara lain yang lebih umum untuk menangani error.

match dan case: memilih satu dari banyak nilai

Bila Anda membandingkan satu variabel dengan banyak kemungkinan nilai, rangkaian elif menjadi panjang. Python menyediakan match dan case:

06_match_case.py
# Bab 7 - match / case: memilih satu dari banyak kemungkinan nilai
# (kebutuhan pakan adalah angka contoh untuk latihan, bukan anjuran)
jenis_ternak = "kambing"

match jenis_ternak:
    case "sapi":
        pakan_kg = 25
    case "kambing" | "domba":
        pakan_kg = 4
    case "ayam":
        pakan_kg = 0.12
    case _:
        pakan_kg = None

if pakan_kg is None:
    print("Jenis ternak belum terdaftar")
else:
    print(f"Pakan {jenis_ternak}: {pakan_kg} kg per ekor per hari")
Pakan kambing: 4 kg per ekor per hari
  • match jenis_ternak: berarti “periksa isi variabel ini”.
  • Tiap case adalah satu kemungkinan. Tanda | berarti atau (kambing atau domba memakai jalan yang sama).
  • case _: menangkap semua sisanya, seperti else.
  • is None adalah cara membandingkan dengan None (nilai “kosong” dari Bab 5).

match/case tersedia mulai Python 3.10. Ia jauh lebih kuat daripada yang ditunjukkan di sini: bisa mencocokkan bentuk data (misalnya daftar berisi dua angka). Untuk Seri B2, cukup pakai untuk memilih berdasarkan satu nilai.

Jebakan: lupa menjorok

07_salah_indentasi.py
# Bab 7 - Salah: lupa menjorok setelah if
bobot_g = 520
if bobot_g >= 500:
print("Ikan siap panen")
  File "07_salah_indentasi.py", line 4
    print("Ikan siap panen")
    ^^^^^
IndentationError: expected an indented block after 'if' statement on line 3

IndentationError berarti “saya mengharapkan baris yang menjorok setelah if”. Pesannya bahkan menyebut if di baris berapa yang menuntut jorokan itu. Obatnya: geser baris print ke dalam, dengan 4 spasi.

Proyek Bersambung B2: status kolam

Sekarang kalkulator kolam dari Bab 6 kita beri kemampuan memutuskan:

08_proyek_status_kolam.py
# Bab 7 - Proyek bersambung B2: status kolam dari bobot rata-rata
# (batas 500 g dan 400 g adalah angka contoh untuk latihan)
bobot_rata_g = float(input("Bobot rata-rata ikan (gram): "))

if bobot_rata_g >= 500:
    status = "SIAP PANEN"
elif bobot_rata_g >= 400:
    status = "HAMPIR SIAP: periksa lagi minggu depan"
else:
    status = "MASIH TUMBUH"

print(f"Status kolam: {status}")
Bobot rata-rata ikan (gram): 460
Status kolam: HAMPIR SIAP: periksa lagi minggu depan

Dengan bobot rata-rata 460 gram, program menjawab HAMPIR SIAP. Coba jalankan dengan angka lain (misalnya 520 dan 300) untuk melihat tiga jalan yang berbeda.

Latihan

  1. Tulis program yang menanyakan suhu air kolam (angka desimal) dan mencetak “Terlalu dingin” bila di bawah 25, “Terlalu panas” bila di atas 32, dan “Suhu baik” selainnya. (Batas 25 dan 32 adalah angka latihan.)
  2. Ubah 03_elif.py supaya bobot sapi ditanyakan lewat input(). Uji dengan 520, 350, dan 200.
  3. Buat program yang menanyakan umur tanaman dalam hari dan mencetak fase: “Semai” (0–14), “Vegetatif” (15–45), “Berbunga” (46–70), atau “Panen” (di atas 70). Ini angka rekaan untuk latihan.
  4. Tantangan: ubah 06_match_case.py supaya jenis_ternak ditanyakan lewat input(), dan tambahkan satu jenis ternak baru. Apa yang terjadi bila pengguna mengetik Sapi dengan huruf S besar?

Ringkasan Bab

  • if / elif / else membuat program memilih jalan. Hanya satu jalan yang dikerjakan.
  • Setelah syarat ada titik dua, dan isinya menjorok (4 spasi). Indentasi adalah bagian dari tata bahasa Python.
  • Python memeriksa syarat dari atas ke bawah; susun dari yang paling ketat.
  • and, or, not menggabungkan syarat.
  • match / case memilih berdasarkan satu nilai; case _ menangkap sisanya.
  • Periksa dulu sebelum membagi, supaya tidak kena ZeroDivisionError.

Selanjutnya, di Bab 8: keputusan sudah bisa diambil. Sekarang kita ajari program mengulang pekerjaan: memeriksa semua kolam, menjumlahkan seluruh panen, tanpa menulis ulang kode puluhan kali.