17. Boolean logic secara mendalam
Bab 16 menggunakan and, or, dan
not untuk menggabungkan kondisi. Ketiganya melakukan lebih
dari itu: mengetahui apa yang sebenarnya mereka kembalikan
membuka trik yang selalu digunakan kode Python. Bab ini menggali lebih
dalam tentang kebenaran.
Truthy dan falsy, lagi
Ingat dari Bab 16: dalam sebuah kondisi,
False, None,
0, 0.0,
"", dan koleksi kosong
dianggap salah. Semua yang lain dianggap benar. Python menyebut yang itu
sebagai falsy dan sisanya truthy.
if 0:
print("zero is truthy") # does NOT print — 0 is falsy in Python
if "":
print("empty is truthy") # does NOT print — "" is falsy in Python
if None:
print("never") # does not print
if 1:
print("one is truthy") # prints
if "hi":
print("non-empty is truthy")# printsDalam Python, 0 dan "" adalah falsy. Ingat
ini setiap kali kamu menguji sebuah nilai secara langsung.
and dan
or mengembalikan sebuah nilai
Inilah yang jarang diberitahukan kepada pemula: and dan
or tidak selalu mengembalikan True atau
False. Mereka mengembalikan salah satu dari dua
sisinya, tidak berubah.
a and b— jikaaadalah falsy, ia mengembalikana; jika tidak, ia mengembalikanb.a or b— jikaaadalah truthy, ia mengembalikana; jika tidak, ia mengembalikanb.
print(5 and 10) # 10 (5 is truthy, so the second value)
print(None and 10) # None (first is falsy, returned as-is)
print(False or "hi") # hi (first falsy, so the second)
print("yes" or "no") # yes (first truthy, returned at once)Digunakan dalam sebuah if, ini berperilaku seperti
logika benar/salah biasa — tapi nilai yang dikembalikan itulah
yang membuat trik di bawah ini menjadi mungkin.
Trik nilai default:
x or default
Karena or mengembalikan sisi truthy pertamanya, kamu
bisa menyediakan nilai cadangan untuk sebuah nilai yang mungkin
None. Bayangkan sebuah nama yang mungkin tidak ada:
typed_name = None # nothing was entered
name = typed_name or "stranger"
print("Hello, " + name) # Hello, strangerJika typed_name menyimpan nilai nyata, name
akan tetap menggunakannya. Baris x or default ini adalah
cara umum Python untuk jatuh kembali ke nilai default — kamu akan
melihatnya ketika sebuah nilai mungkin tidak ada.
Python 3.8 menambahkan operator walrus := dan ada juga
pola value if value is not None else default, tapi
x or default lebih pendek dan layak diketahui untuk kasus
sederhana di mana nilai falsy apa pun harus memicu cadangan.
Buka exercises/17/01-default.py. chosen
disetel ke None. Gunakan chosen or "rock"
untuk jatuh kembali ke "rock", lalu cetak hasilnya. Setel
chosen ke kata nyata dan jalankan lagi.
Short-circuit: sisi kedua dilewati
and dan or bersifat malas.
Mereka berhenti segera setelah jawabannya sudah pasti:
a and b— jikaaadalah falsy,bbahkan tidak pernah dilihat.a or b— jikaaadalah truthy,btidak pernah dilihat.
Ini memungkinkan pengujian pertama menjaga yang kedua, yang berjalan hanya setelah yang pertama lolos:
total = 90
count = 0
# the average is only worth working out when count is not zero,
# so the count check guards the division
if count > 0 and total / count > 20:
print("high average")
else:
print("no average to show")Karena count > 0 adalah False, Python tidak pernah
mengevaluasi total / count — ia langsung short-circuit ke
else. Pola
if x > 0 and sesuatu-yang-menggunakan-x sering
muncul.
not membalik
truthiness
not mengubah nilai apa pun menjadi boolean nyata —
True jika falsy, False jika truthy:
print(not None) # True
print(not 0) # True (0 is falsy, so "not 0" is True)
print(not False) # True
print(not 1) # False (1 is truthy)Berguna untuk bertanya "apakah ini tidak ada?":
key = None
if not key:
print("You need a key.")Pekerjaan Rumah
File pekerjaan rumah ada di exercises/17/homework/.
Soal 1 — Warna default
Buka exercises/17/homework/01-default-colour.py.
fav menyimpan sebuah warna atau None.
Menggunakan or, setel colour ke
fav, atau ke "blue" ketika fav
adalah None, lalu cetak
Your colour is <colour>. Jalankan sekali dengan
fav = None dan sekali dengan warna nyata.
Soal 2 — Tabel truthy
Buka exercises/17/homework/02-truthy.py. Untuk
masing-masing nilai ini, cetak nilainya dan apakah itu truthy,
menggunakan bool(value) untuk mengkonversinya ke boolean
nyata: 0, "", None,
False, "hi", 1. Fungsi
bool() memberikan True untuk nilai truthy dan
False untuk yang falsy.
Soal 3 — Pembagian terjaga
Buka exercises/17/homework/03-guarded.py. Dua angka:
total dan count (yang mungkin 0).
Menggunakan and, cetak rata-rata total / count
hanya ketika count lebih besar dari 0; jika
tidak, cetak no data. Uji dengan count disetel
ke 0 dan ke angka nyata.
Tantangan — Nilai pertama yang ada
Buka exercises/17/homework/04-first-value.py. Tiga
variable a, b, c masing-masing
menyimpan sebuah string atau None. Dalam satu
baris menggunakan or, cetak yang pertama memiliki
nilai, atau none jika ketiga-tiganya None.
Coba berbagai kombinasi nilai dan None.
Buntu atau sudah selesai? Buka halaman solusi pekerjaan rumah.