If, Elif, Else — Python

Percabangan: if, elif, else Python menggunakan indentasi (biasanya 4 spasi) untuk mendefinisikan blok kode, bukan kurung kurawal seperti JavaScript atau PHP…

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

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

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

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".

Yang akan kamu pelajari