17. Boolean logic secara mendalam — Solusi Pekerjaan Rumah

File solusi .py ada di exercises/17/homework/solutions/.

Soal 1 — Warna default

Soal. Jatuh kembali ke "blue" ketika fav adalah None.

Solusi.

fav = None                   # try a real colour here too
colour = fav or "blue"
print("Your colour is " + colour)

Dengan fav = None, ia mencetak Your colour is blue; dengan fav = "red", ia mencetak Your colour is red.

Kesalahan umum.

  • Menulis if fav is None: colour = "blue" else colour = fav. Benar, tapi fav or "blue" adalah idiom yang lebih pendek dan layak diketahui.

Soal 2 — Tabel truthy

Soal. Tunjukkan apakah setiap nilai truthy menggunakan bool(value).

Cara memikirkannya. bool() mengkonversi nilai apa pun ke True atau False sesuai aturan truthy/falsy Python.

Solusi.

print(0, bool(0))         # 0      False
print("", bool(""))       #        False
print(None, bool(None))   # None   False
print(False, bool(False)) # False  False
print("hi", bool("hi"))   # hi     True
print(1, bool(1))         # 1      True

Dalam Python, 0 dan "" adalah falsy.

Soal 3 — Pembagian terjaga

Soal. Cetak rata-rata hanya ketika count di atas nol.

Solusi.

total = 90
count = 0                    # try a real number too

if count > 0 and total / count > 0:
    print("Average: " + str(total / count))
else:
    print("no data")

Dengan count = 0, pengujian count > 0 adalah False, sehingga Python melakukan short-circuit dan melewati pembagian, mencetak no data. Dengan count = 3, ia mencetak Average: 30.0.

Kesalahan umum.

  • Menulis if total / count ... tanpa penjaga count > 0. Pembagian kemudian berjalan bahkan ketika count adalah 0 — itu menimbulkan ZeroDivisionError. Penjaga mencegahnya.

Tantangan — Nilai pertama yang ada

Soal. Cetak yang pertama dari a, b, c yang bukan None.

Solusi.

a = None
b = None
c = "third"

print(a or b or c or "none")     # third

or berjalan dari kiri ke kanan dan mengembalikan nilai truthy pertama, sehingga rantai mendarat pada variable pertama yang menyimpan sesuatu. Jika ketiganya None, ia mengembalikan "none" terakhir.

Kesalahan umum.

  • Tangga if/elif yang panjang memeriksa masing-masing untuk None. Benar, tapi rantai or melakukannya dalam satu baris.

Selesai?

Kamu sekarang tahu bahwa and/or mengembalikan nilai, melakukan short-circuit, dan menggerakkan trik x or default. Selanjutnya adalah Loop, cara lain untuk membuat program melakukan lebih dari hal yang sama setiap saat.