Percabangan membuat program memilih jalan berdasarkan syarat: kalau ini, lakukan itu. Bayangin aturan diskon yang ditempel di dinding Warung Kopi Pak Darto: "Belanja Rp100.000 ke atas diskon 15%. Rp50.000 ke atas diskon 10%. Rp25.000 ke atas diskon 5%. Di bawah itu, gak ada diskon." Pak Darto membacanya dari atas, dan berhenti di baris pertama yang cocok. Python melakukan hal yang sama dengan if, elif, dan else.
🧪 Tebakan cepat: kalau aturan itu dibalik, mulai dari "Rp25.000 ke atas diskon 5%", berapa diskon untuk belanja Rp120.000? Tebak dulu, jawabannya ada di bagian "Urutan elif itu penting".
if, elif, else
total = 89000
if total >= 100000:
print("Diskon 15%")
elif total >= 50000:
print("Diskon 10%")
elif total >= 25000:
print("Diskon 5%")
else:
print("Gak ada diskon")
Output-nya Diskon 10%. Begini Python menelusurinya untuk total = 89000:
| Baris | Syarat | Hasil | Yang terjadi |
|---|---|---|---|
if total >= 100000: |
89000 >= 100000 | False |
bloknya dilewati |
elif total >= 50000: |
89000 >= 50000 | True |
bloknya jalan, mencetak Diskon 10% |
elif total >= 25000: |
gak dicek | sudah ada yang cocok | |
else: |
gak dicek | sudah ada yang cocok |
- Tiap syarat diakhiri titik dua
:, dan baris yang dijalankan kalau syaratnyaTrueditulis menjorok 4 spasi di bawahnya. Kumpulan baris menjorok itu disebut blok. elifsingkatan dari else if: dicek hanya kalau semua syarat di atasnyaFalse. Boleh ada sebanyak apa pun.elsegak punya syarat. Dia menangkap semua yang lolos dari syarat di atasnya.- Dari satu rangkaian
if/elif/else, paling banyak satu blok yang jalan: yang pertamaTrue. Sisanya gak dicek lagi.
Indentasi menandai blok
Python gak memakai kurung kurawal seperti JavaScript. Yang menandai isi sebuah blok cuma indentasinya. Baris yang kembali ke kiri sudah di luar blok, dan selalu jalan. Lupa menjorokkan isi blok:
def diskon(total):
if total >= 100000:
return 15
File "/home/darto/warung.py", line 3
return 15
^^^^^^
IndentationError: expected an indented block after 'if' statement on line 2
Pesannya jelas: sesudah if di baris 2, Python menunggu blok yang menjorok, tapi baris 3 sejajar dengan if-nya.
Urutan elif itu penting
total = 120000
if total >= 25000:
print("Diskon 5%")
elif total >= 50000:
print("Diskon 10%")
elif total >= 100000:
print("Diskon 15%")
Output-nya Diskon 5%, padahal belanjanya Rp120.000. Itu jawaban tebakannya. Syarat pertama, 120000 >= 25000, sudah True, jadi Python berhenti di situ dan dua syarat sesudahnya gak pernah dicek. Gak ada error, hasilnya cuma salah diam-diam.
Aturannya: kalau syaratnya pakai >=, mulai dari batas yang paling besar, lalu turun. Dan >= ikut menghitung batasnya: belanja tepat Rp50.000 dapat 10%. Pakai > dan belanja Rp50.000 cuma dapat 5%.
Membungkus jadi fungsi: def dan return
Aturan diskon dipakai berkali-kali, jadi enaknya dibungkus jadi fungsi:
def diskon(total):
if total >= 100000:
return 15
elif total >= 50000:
return 10
elif total >= 25000:
return 5
else:
return 0
print(diskon(120000)) # 15
print(diskon(89000)) # 10
print(diskon(50000)) # 10
print(diskon(20000)) # 0
def diskon(total):membuat fungsi bernamadiskonyang menerima satu nilai,total. Isinya menjorok di bawahnya.return 15mengirim 15 balik ke yang memanggil, dan fungsinya langsung selesai.print(diskon(89000))menjalankan fungsinya dengantotal = 89000, lalu mencetak yang di-return:10.- Fungsi yang isinya baru
passartinya belum ada isinya. Gantipassdenganif-mu. Fungsi dibahas lengkap di pelajaran Fungsi.
Latihan pelajaran ini memakai pola yang sama untuk nilai ujian: grade(nilai) mengembalikan "A", "B", "C", "D", atau "E".
Truthy dan falsy
if gak harus berisi perbandingan. Nilai apa pun bisa jadi syarat:
catatan = ""
if catatan:
print(f"Catatan: {catatan}")
else:
print("Tanpa catatan")
Output-nya Tanpa catatan. Nilai yang dianggap False disebut falsy: False, None, 0, 0.0, "" (teks kosong), dan [] (list kosong). Selain itu semuanya truthy, dianggap True, termasuk "0" dan " " (teks berisi spasi), karena teksnya gak kosong.
If dalam satu baris
ongkir = 0 if total >= 50000 else 10000
Bentuknya nilai_kalau_True if syarat else nilai_kalau_False. Dengan total = 89000, ongkir berisi 0. Cocok untuk memilih satu nilai, bukan untuk menjalankan banyak baris.
⚠️ Jebakan yang sering ketemu
- Menulis
else if. Python menolaknya denganSyntaxError: expected ':'. Tuliselif. - Lupa titik dua.
if total >= 50000tanpa:juga jadiSyntaxError: expected ':'. - Beberapa
ifterpisah, bukanelif. Tiapifdicek sendiri-sendiri, jadi nilai 95 bisa lolos>= 90dan>= 80, lalu mencetak dua huruf. Satu rangkaianif/elif/elsecuma menjalankan satu cabang. - Batas terkecil dicek duluan. Kalau
nilai >= 60ada paling atas, nilai 95 pun berhenti di situ dan dapat"D".
TL;DR: if syarat: menjalankan blok yang menjorok di bawahnya kalau syaratnya True. elif (else if) dicek hanya kalau semua yang di atasnya False, dan else menangkap sisanya. Cuma cabang pertama yang True yang jalan, jadi untuk >= urutkan dari batas terbesar. Indentasi 4 spasi menandai blok, dan blok yang lupa menjorok memicu IndentationError: expected an indented block. def nama(param): membuat fungsi, return mengirim hasilnya balik. Falsy: False, None, 0, "", []. If satu baris: "Lulus" if nilai >= 70 else "Tidak Lulus".