Percabangan membuat program memilih tindakan yang berbeda berdasarkan keadaan data saat program berjalan. Topik ini membahas pernyataan if, elif, dan else sebagai alat percabangan utama Python, beserta aturan truthiness, yakni penilaian kebenaran yang diberlakukan Python terhadap setiap nilai. Setelah membacanya, rantai keputusan bertingkat dapat disusun dengan urutan kondisi yang benar, dan perilaku program terhadap nilai kosong, angka nol, serta None dapat diprediksi.
Sintaks dasar if dan else#
Pernyataan if menjalankan satu blok kode hanya apabila kondisinya bernilai benar. Kondisi ditulis setelah kata kunci if dan diakhiri titik dua, sedangkan bloknya ditulis menjorok ke dalam, lazimnya empat spasi menurut anjuran PEP 8. Apabila kondisi bernilai salah, blok else yang mengikutinya dijalankan, sedangkan tanpa else program melanjutkan eksekusi ke baris setelah if tanpa melakukan apa pun. Nilai yang digunakan sebagai kondisi tidak harus bertipe bool, karena Python menilai kebenaran setiap nilai secara otomatis. Mekanisme penilaian itu dibahas pada bagian truthiness di bawah.
Struktur paling sederhana hanya memiliki dua jalur, yaitu jalur saat kondisi terpenuhi dan jalur cadangan. Contoh berikut menentukan wujud air pada sebuah suhu.
suhu = 4
if suhu <= 0:
wujud = "padat"
else:
wujud = "cair"
print(f"air pada suhu {suhu} derajat celsius berwujud {wujud}")air pada suhu 4 derajat celsius berwujud cairKondisi suhu <= 0 bernilai salah untuk angka 4, sehingga blok else yang dieksekusi. Perhatikan bahwa blok yang menjorok adalah bagian milik pernyataannya, sedangkan baris print yang sejajar dengan if dijalankan setelah percabangan selesai. Perbedaan satu spasi saja mengubah blok milik siapa, sehingga penjorokan perlu dijaga konsisten empat spasi.
Rantai elif untuk banyak kondisi#
Rantai elif, singkatan dari else if, menambahkan kondisi tambahan antara if dan else. Saat rantai ini dijalankan, kondisi diperiksa berurutan dari atas ke bawah, dan hanya blok milik kondisi benar yang pertama dieksekusi. Kondisi di bawahnya tidak diperiksa lagi meskipun juga bernilai benar, sehingga urutan penulisan kondisi menentukan hasil. Blok else pada akhir rantai bersifat opsional dan menjadi jalur apabila seluruh kondisi di atasnya salah.
Program berikut menetapkan predikat untuk sebuah nilai ujian menurut empat rentang.
nilai = 71
if nilai >= 85:
predikat = "A"
elif nilai >= 75:
predikat = "B"
elif nilai >= 65:
predikat = "C"
else:
predikat = "D"
print(f"nilai {nilai} memperoleh predikat {predikat}")nilai 71 memperoleh predikat CNilai 71 gagal pada syarat pertama karena lebih kecil dari 85, lalu memenuhi syarat ketiga, yaitu nilai >= 65. Contoh ini juga memperlihatkan sifat berhenti pada kecocokan pertama. Untuk nilai 86, kondisi nilai >= 85 sudah benar sehingga blok predikat A yang dijalankan, dan perbandingan nilai >= 65 yang juga benar tidak pernah diperiksa.
Simpan berkas di atas di direktori kerja, lalu jalankan dengan perintah berikut.
# menjalankan program predikat nilai
python3 predikat-nilai.pynilai 71 memperoleh predikat CTruthiness pada nilai kosong dan None#
Python menilai kebenaran setiap nilai secara implisit apabila nilai itu digunakan sebagai kondisi. Fungsi bool() melakukan penilaian yang sama secara eksplisit, sehingga cocok untuk mengamati aturannya. Nilai-nilai yang kosong dinilai salah, yaitu angka nol dalam semua bentuknya, string kosong, list kosong, dictionary kosong, set kosong, serta konstanta None. Nilai lainnya dianggap benar, termasuk wadah yang berisi satu angka nol sekalipun, karena wadah itu tidak kosong.
print(bool(0), bool(""), bool([]), bool({}), bool(set()))
print(bool(None))
print(bool(7), bool("C"), bool([0]), bool(" "))False False False False False
False
True True True TrueBaris pertama dan kedua memperlihatkan seluruh kelompok nilai kosong yang dinilai salah. String berisi satu spasi pada baris ketiga tetap dinilai benar karena isinya tidak benar-benar kosong. Aturan ini menjadikan if daftar: sebagai cara singkat untuk memeriksa isi sebuah wadah tanpa memanggil len().
Konstanta None menandakan tidak adanya nilai sama sekali, sedangkan list kosong adalah wadah yang nyata tetapi belum berisi apa pun. Keduanya sama-sama bernilai salah menurut truthiness, tetapi keduanya membawa makna yang berbeda bagi logika program. Karena itu, kondisi if not data: tidak dapat membedakan data yang belum tersedia dari data yang memang kosong.
data = None
if data:
print("ada data")
else:
print("tidak ada data")
data = []
if data:
print("ada data")
else:
print("tidak ada data")tidak ada data
tidak ada dataMenggabungkan kondisi dengan and, or, dan not#
Tiga operator logika menggabungkan beberapa kondisi menjadi satu. Operator and menghasilkan benar hanya bila kedua sisinya benar, operator or menghasilkan benar bila salah satu sisinya benar, sedangkan not membalik nilai kebenaran sisi yang mengikutinya. Ketiganya dievaluasi dengan teknik short-circuit evaluation, yakni penghentian penilaian begitu hasil akhir ekspresi sudah pasti. Pada and, sisi kedua tidak dinilai bila sisi pertama sudah salah, dan pada or, sisi kedua tidak dinilai bila sisi pertama sudah benar.
Contoh berikut menggabungkan dua syarat kelulusan dan memeriksa hari libur.
nilai = 82
kehadiran = 0.9
if nilai >= 75 and kehadiran >= 0.8:
print("lulus dengan syarat terpenuhi")
hari = "Minggu"
if hari == "Sabtu" or hari == "Minggu":
print("hari libur")lulus dengan syarat terpenuhi
hari liburSifat penilaian pendek bukan sekadar efisiensi, tetapi juga alat pengaman. Ekspresi pada sisi kedua tidak pernah dijalankan apabila sisi pertama sudah menentukan hasil, sehingga pemeriksaan pengaman dapat diletakkan lebih dulu.
pembagi = 0
if pembagi != 0 and 100 / pembagi > 5:
print("rasio tinggi")
else:
print("pembagi nol atau rasio rendah")pembagi nol atau rasio rendahApabila urutan kondisinya dibalik menjadi 100 / pembagi > 5 and pembagi != 0, pembagian dengan nol dieksekusi lebih dahulu dan program berhenti dengan ZeroDivisionError. Kondisi yang lebih murah dan lebih aman untuk dievaluasi sebaiknya ditulis di sisi kiri and.
Kesalahan umum#
Kesalahan pertama adalah menulis tanda = alih-alih == pada kondisi. Tanda = adalah penugasan nilai, sedangkan perbandingan memerlukan ==. Interpreter menolak program semacam ini sebelum berjalan, dengan pesan yang menunjuk pada sintaks baris tersebut.
Kesalahan kedua adalah menulis rentang kondisi dari yang paling longgar. Rantai elif berhenti pada kondisi benar yang pertama, sehingga kondisi yang lebih sempit tidak pernah tercapai.
nilai = 86
if nilai >= 65:
predikat = "C"
elif nilai >= 85:
predikat = "A"
print(predikat)CNilai 86 seharusnya memperoleh predikat A, tetapi kondisi nilai >= 65 sudah benar lebih dulu. Susun kondisi rentang dari yang paling ketat ke yang paling longgar agar rantai elif bekerja sesuai maksudnya. Dengan urutan yang benar, kondisi paling longgar hanya dijangkau apabila seluruh syarat di atasnya gagal.
Kesalahan ketiga adalah memperlakukan None dan wadah kosong sebagai hal yang sama. Kondisi if not data: bernilai benar untuk keduanya, sehingga jalur penanganannya ikut tertukar. Apabila pembedaannya penting, periksa None terlebih dahulu dengan is None, baru kemudian kekosongan wadahnya.
data = []
if data is None:
print("data belum tersedia")
elif not data:
print("wadah ada tetapi kosong")wadah ada tetapi kosongRingkasan#
- Pernyataan
ifmenjalankan bloknya apabila kondisinya benar, dan rantaielifmemilih blok milik kondisi benar pertama dari atas ke bawah. - Truthiness menilai salah untuk nol, string kosong, wadah kosong, dan
None, serta menilai benar untuk nilai lainnya. is Nonememeriksa ketiadaan nilai secara khusus, sehingga tidak tertukar dengan wadah yang kosong.- Operator
and,or, dannotmenggabungkan kondisi dengan penilaian pendek yang menghentikan evaluasi begitu hasil sudah pasti.
Referensi#
- More Control Flow Tools — Python Software Foundation — Panduan resmi pernyataan if, elif, dan else pada tutorial Python.
- Truth Value Testing — Python Software Foundation — Daftar nilai yang dinilai salah dan benar oleh Python.
- PEP 8 — Python Software Foundation
— Panduan gaya resmi yang menganjurkan perbandingan
Nonedengan operatoris.