DataLens

Boolean dan operator perbandingan

Ajukan pertanyaan ya/tidak di kode dengan perbandingan, gabungkan dengan and, or, dan not, dan pelajari apa yang dianggap benar oleh Python.

Level: Dasar · 10 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Idenya

Setiap keputusan yang dibuat program bermuara pada pertanyaan ya/tidak. Apakah pesanan ini di atas Rp 300.000? Apakah produknya ada di stok? Apakah pelanggannya di Jakarta dan punya akun bisnis? Python menjawab pertanyaan-pertanyaan ini dengan boolean: tipe yang punya tepat dua nilai, True dan False.

Kamu akan memakai boolean untuk memfilter data, untuk menentukan kode mana yang dijalankan (dua modul lagi), dan untuk menulis pengecekan yang menangkap data buruk sebelum masuk ke laporan.

Operator perbandingan

Perbandingan melihat dua nilai dan menghasilkan boolean:

OperatorArtinyaContohHasil
==sama dengan5 == 5True
!=tidak sama dengan5 != 3True
<kurang dari3 < 5True
>lebih dari3 > 5False
<=kurang dari atau sama dengan5 <= 5True
>=lebih dari atau sama dengan4 >= 5False
total = 285000
print(total > 300000)
print(total >= 285000)
free_shipping = total >= 300000
print(free_shipping)
print(type(free_shipping))
False
True
False
<class 'bool'>

Perbandingan hanyalah sebuah nilai, jadi kamu bisa menyimpannya di variabel dengan nama yang baik seperti free_shipping. Kode yang berbunyi if free_shipping: hampir terbaca seperti bahasa Inggris biasa.

Awas

= memberi nilai dan == membandingkan. total = 300000 mengubah total; total == 300000 bertanya apakah nilainya sama dengan 300000. Tertukar antara keduanya adalah salah satu bug pemula yang paling umum.

Membandingkan teks

== juga bekerja pada string, dan sifatnya persis: huruf besar-kecil, spasi, dan tanda baca semuanya dihitung.

city = "Jakarta"
print(city == "Jakarta")
print(city == "jakarta")
print(city.lower() == "jakarta")
print("Jakarta " == "Jakarta")
True
False
True
False

Inilah sebabnya modul sebelumnya begitu ribut soal .strip() dan .lower(): bersihkan teksnya, lalu bandingkan.

String juga bisa dibandingkan dengan < dan >, yang membandingkannya secara alfabetis (secara teknis, berdasarkan kode karakter, jadi semua huruf kapital datang sebelum huruf kecil). "apple" < "banana" bernilai True. Pakai ini untuk mengurutkan, bukan untuk mengecek jumlah.

Perbandingan berantai

Python memungkinkanmu menulis rentang seperti di matematika:

rating = 4.3
print(4.0 <= rating <= 5.0)
age = 17
print(18 <= age < 65)
True
False

4.0 <= rating <= 5.0 berarti "rating berada di antara 4 dan 5, inklusif". Lebih rapi daripada menulis dua perbandingan yang disambung.

Menggabungkan kondisi: and, or, not

Pertanyaan sungguhan biasanya punya lebih dari satu bagian. Python punya tiga operator logika:

city = "Jakarta"
segment = "Business"
total = 450000

print(city == "Jakarta" and segment == "Business")
print(city == "Bandung" or total > 400000)
print(not total > 400000)
True
True
False

Membaca ketiga hasilnya: yang pertama True karena kotanya memang Jakarta dan segmennya memang Business. Yang kedua True walaupun kotanya bukan Bandung, karena or hanya butuh satu sisi, dan totalnya di atas 400000. Yang ketiga membalik total > 400000, yang bernilai True, menjadi False.

Ini tabel kebenaran lengkap untuk and dan or, yang mencakup setiap kombinasi:

aba and ba or b
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

Kalau kamu mencampur and dan or, and dievaluasi lebih dulu, sama seperti * sebelum +. Pakai tanda kurung untuk membuat pengelompokannya eksplisit:

is_vip = False
in_stock = True
total = 350000
eligible = (is_vip or total >= 300000) and in_stock
print(eligible)
True

Short-circuiting

Python berhenti mengevaluasi begitu ia tahu jawabannya. Di a and b, kalau a bernilai False keseluruhannya False, jadi b bahkan tidak pernah dilihat. Di a or b, kalau a bernilai True, b dilewati. Ini memungkinkanmu berjaga-jaga terhadap error:

quantity = 0
total = 0
print(quantity > 0 and total / quantity > 50000)
False

Tanpa short-circuiting, total / quantity akan crash dengan ZeroDivisionError. Karena quantity > 0 sudah False, Python tidak pernah mencoba pembagiannya.

Truthiness: apa yang dianggap True?

Python bisa memperlakukan nilai apa pun sebagai benar atau salah, bukan hanya boolean. Ini disebut truthiness. Nilai-nilai yang "falsy" hanya sedikit dan layak dihafal:

Selain itu semuanya "truthy". bool() memperlihatkan bagaimana Python melihat sebuah nilai:

print(bool(0), bool(42))
print(bool(""), bool("Ayu"))
print(bool(None))
False True
False True
False

Kamu akan melihat truthiness dipakai dalam kondisi seperti if name: yang berarti "kalau name tidak kosong". Ini gaya Python yang lazim, tapi hati-hati: if quantity: bernilai False untuk quantity 0, yang mungkin saja nilai yang valid. Kalau nol punya makna, tulis perbandingannya secara lengkap: if quantity is not None:.

is versus ==

== bertanya "apakah nilainya sama?". is bertanya "apakah ini objek yang benar-benar sama?". Sebagai pemula, kamu hanya butuh is untuk satu hal: mengecek None.

discount = None
print(discount is None)
True

Selalu tulis x is None (bukan x == None). Itu konvensi Python dan selalu benar.

Mengapa ini penting untuk kode bersih

Beri nama pada kondisimu. if total >= 300000 and city in ("Jakarta", "Bandung") and not is_cancelled: sulit dibaca sekali jalan, tapi free_shipping = total >= 300000 diikuti if free_shipping and ships_locally and not is_cancelled: menjelaskan aturan bisnisnya. Boolean dengan nama yang baik adalah dokumentasi yang tidak bisa kedaluwarsa.

Rangkuman

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: List, indexing, dan slicing →