Perhitungan dan penyaringan pada chapter sebelumnya menghasilkan fakta; keputusan mengubah fakta menjadi tindakan. Total belanja Rp250.000 baru bermakna setelah program memilih: beri diskon 20 persen, beri gratis ongkir, atau jangan beri apa pun. Struktur yang melakukan pemilihan tersebut di Python adalah percabangan — if, elif, dan else. Chapter ini membahas bentuk dasarnya, penggabungan beberapa kondisi, percabangan bersarang, dan satu contoh klasik dunia data: mengkategorikan setiap transaksi ke dalam tingkatan diskon.
Bentuk Dasar if #
Percabangan paling sederhana terdiri dari satu kondisi dan satu blok isi. Kondisi ditulis setelah kata kunci if, diakhiri titik dua, lalu isi percabangan ditulis menjorok empat spasi — indentasi yang kita kenal pada chapter pertama Section ini. Blok isi hanya dijalankan bila kondisinya bernilai True:
suhu_bandung = 31
if suhu_bandung > 30:
print("Cuaca tergolong panas untuk Bandung.")
print("Rencanakan stok minuman dingin lebih banyak.")
print("Pencatatan suhu selesai.")Output yang Dihasilkan:
Cuaca tergolong panas untuk Bandung.
Rencanakan stok minuman dingin lebih banyak.
Pencatatan suhu selesai.Karena 31 > 30 bernilai True, kedua baris di dalam blok dijalankan, lalu eksekusi berlanjut ke baris berikutnya di luar blok. Bila nilainya diganti 28, kedua baris tersebut dilewati sama sekali dan satu-satunya keluaran adalah “Pencatatan suhu selesai.” — itulah seluruh mekanisme percabangan: kondisi menentukan blok mana yang dijalankan.
Mengkategorikan dengan if/elif/else #
Satu kondisi memilih antara “jalankan” dan “lewatkan”. Kebutuhan nyata biasanya bertingkat: total belanja kecil tanpa diskon, sedikit dapat potongan 5 persen, dan seterusnya. Rantai if/elif/else menangani tingkatan tersebut — Python menguji tiap kondisi dari atas, menjalankan blok pertama yang terpenuhi, lalu melompat melewati sisanya.
Kasus kita adalah program diskon Toko Kopi Kita dengan aturan berikut:
| Total belanja | Kategori | Potongan |
|---|---|---|
>= 200000 | Hemat Besar | 20% |
100000 - 199999 | Hemat | 10% |
50000 - 99999 | Ringan | 5% |
< 50000 | Tanpa Diskon | 0% |
Berikut implementasinya untuk lima transaksi dalam satu hari:
transaksi = [45000, 250000, 75000, 120000, 180000]
for total in transaksi:
if total >= 200000:
kategori = "Hemat Besar"
potongan = total * 0.20
elif total >= 100000:
kategori = "Hemat"
potongan = total * 0.10
elif total >= 50000:
kategori = "Ringan"
potongan = total * 0.05
else:
kategori = "Tanpa Diskon"
potongan = 0
print(f"Rp{total:>7,} -> {kategori:13} potongan Rp{round(potongan):,}")Output yang Dihasilkan:
Rp 45,000 -> Tanpa Diskon potongan Rp0
Rp250,000 -> Hemat Besar potongan Rp50,000
Rp 75,000 -> Ringan potongan Rp3,750
Rp120,000 -> Hemat potongan Rp12,000
Rp180,000 -> Hemat potongan Rp18,000Mari kita bedah alurnya untuk transaksi Rp250.000: kondisi pertama total >= 200000 bernilai True, sehingga kategori diisi "Hemat Besar" dan potongan dihitung 20 persen — dua cabang elif serta else tidak pernah diuji. Sebaliknya, untuk Rp45.000 ketiga kondisi pertama gagal sehingga blok else yang menang. Cabang else bersifat penampung akhir: tanpa kondisi apa pun, bloknya menangani semua sisa kasus.
Menggabungkan Beberapa Kondisi #
Keputusan nyata sering menimbang lebih dari satu hal: nilai belanja, status keanggotaan, kota pengiriman. Operator and, or, dan not dari chapter sebelumnya langsung terpakai di sini — cukup tulis kondisi gabungan pada baris if-nya:
total_belanja = 150000
member = True
pelanggan_baru = False
gratis_ongkir = total_belanja >= 100000 and member
promo_pembuka = pelanggan_baru or total_belanja >= 250000
print("Gratis ongkir :", gratis_ongkir)
print("Dapat promo pembuka :", promo_pembuka)
if gratis_ongkir and promo_pembuka:
print("Keputusan: beri bonus voucher minuman.")
elif gratis_ongkir or promo_pembuka:
print("Keputusan: satu benefit aktif untuk transaksi ini.")
else:
print("Keputusan: transaksi tanpa benefit tambahan.")Output yang Dihasilkan:
Gratis ongkir : True
Dapat promo pembuka : False
Keputusan: satu benefit aktif untuk transaksi ini.Alur skrip di atas: dua kondisi gabungan dinilai lebih dulu dan disimpan sebagai variabel bool, sehingga keputusan akhirnya bisa dibaca seperti kalimat — gratis_ongkir and promo_pembuka berarti “keduanya aktif”. Untuk transaksi ini gratis ongkir True tetapi promo pembuka False, maka cabang elif dengan or yang terpilih, karena cukup salah satu bernilai True. Menyimpan kondisi pada variabel bernama deskriptif seperti ini membuat aturan bisnis mudah diperiksa orang non-teknis sekalipun.
Percabangan Bersarang #
Blok if juga boleh berisi if lain — struktur bersarang untuk keputusan bertahap. Contoh berikut menentukan ongkos kirim: pesanan besar berhak potongan tarif, lalu tarifnya bergantung kota tujuan:
pesanan = [
("Kopi Gayo 500g", 89000, "Bandung"),
("Teh Melati 200g", 35000, "Surabaya"),
("Kopi Toraja 250g", 120000, "Surabaya"),
]
for nama, total, kota in pesanan:
if total >= 50000:
if kota == "Bandung":
print(f"{nama}: gratis ongkir area Bandung")
else:
print(f"{nama}: ongkir flat Rp10.000")
else:
print(f"{nama}: ongkir dihitung berdasarkan jarak")Output yang Dihasilkan:
Kopi Gayo 500g: gratis ongkir area Bandung
Teh Melati 200g: ongkir dihitung berdasarkan jarak
Kopi Toraja 250g: ongkir flat Rp10.000Mari kita telusuri ketiga baris keluaran tersebut. Kopi Gayo bernilai 89000 sehingga lolos syarat total >= 50000, lalu karena dikirim ke Bandung, cabang terdalam memberinya gratis ongkir. Teh Melati bernilai 35000, gagal pada syarat pertama, dan langsung jatuh ke else terluar — cabang kota tidak pernah diuji untuk pesanan ini. Kopi Toraja lolos syarat nilai, tetapi karena dikirim ke Surabaya, else terdalam yang menentukan tarifnya. Dari sini terlihat sifat percabangan bersarang: if kota == "Bandung" hanya berlaku bagi pesanan yang sudah lolos syarat nilai belanja, dan membaca tingkat indentasinya adalah kunci memahami alurnya.
Referensi Resmi #
- pandas — DataFrame.groupby — kelak, kategori hasil percabangan dapat menjadi dasar pengelompokan baris DataFrame untuk menghitung agregasi per kelompok.
Rangkuman #
ifmenjalankan blok terindentasi hanya bila kondisinyaTrue;if/elif/elsemenguji kondisi berurutan dan menjalankan blok pertama yang terpenuhi.- Rantai berbasis batas diurutkan dari batas paling ketat (nilai terbesar) agar tiap transaksi berhenti di kategori yang tepat.
- Operator
and,or, dannotmenggabungkan beberapa kondisi; menyimpannya pada variabel bernama jelas membuat aturan bisnis mudah dibaca. - Percabangan bersarang menangani keputusan bertahap; jaga kedalamannya rendah demi keterbacaan.
Transaksi kini terkategorikan otomatis satu per satu. Tetapi lima transaksi masih terasa ringan — bagaimana bila sehari ada lima ratus, atau satu bulan penuh? Mengulang pemrosesan untuk setiap baris data adalah pekerjaan perulangan, yang kita bahas pada chapter Perulangan .