%%{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"]
Bab 7 — Kondisional: Mengajari Program Mengambil Keputusan
Seri B2 — Fondasi Bahasa Python
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 dikerjakanIkan siap panen
Catat di buku panen
Pemeriksaan selesai
Perhatikan tiga hal:
- Setelah syarat ada tanda titik dua
:. - Baris yang menjadi isi
ifmenjorok ke dalam (di buku ini 4 spasi). Dua barisprintyang menjorok hanya dikerjakan bila syaratnya benar. - Baris terakhir tidak menjorok, sehingga dikerjakan selalu, entah syaratnya benar atau salah.
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:
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.
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.
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
caseadalah satu kemungkinan. Tanda|berarti atau (kambing atau domba memakai jalan yang sama). case _:menangkap semua sisanya, sepertielse.is Noneadalah cara membandingkan denganNone(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
- 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.)
- Ubah
03_elif.pysupaya bobot sapi ditanyakan lewatinput(). Uji dengan 520, 350, dan 200. - 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.
- Tantangan: ubah
06_match_case.pysupayajenis_ternakditanyakan lewatinput(), dan tambahkan satu jenis ternak baru. Apa yang terjadi bila pengguna mengetikSapidengan huruf S besar?
Ringkasan Bab
if/elif/elsemembuat 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,notmenggabungkan syarat.match/casememilih 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.