Kursus Python / Memahami perbandingan, and, or, dan nilai bawaan

Operator perbandingan menguji hubungan antarnilai, sedangkan operator logika menggabungkan kondisi. Dalam Python, and dan or dapat mengembalikan salah satu operandnya, bukan selalu nilai boolean, sehingga pemeriksaan kondisi perlu dibedakan dari pemilihan nilai bawaan.

Bedakan kesetaraan, penugasan, dan identitas

Gunakan == untuk membandingkan nilai, = untuk penugasan, dan != untuk ketidaksamaan. Operator <, >, <=, serta >= menyatakan hubungan urutan. Perbandingan berantai seperti 0 <= amount <= 10000 menyertakan kedua batas, sedangkan 0 < amount <= 10000 menolak nol tetapi masih menerima 10000.

Periksa tipe masukan sebelum membandingkan besar-kecilnya. String "8000" bukan integer 8000, dan keduanya tidak dapat langsung dibandingkan dengan operator urutan. Jika masukan berasal dari pengguna, lakukan konversi yang sesuai seperti pada contoh membaca dan mengubah jumlah pengeluaran.

None adalah objek yang lazim dipakai untuk menandai ketiadaan nilai; periksa dengan is None. Operator is memeriksa apakah dua referensi menunjuk objek yang sama, sedangkan == memeriksa kesetaraan nilai. Dua list terpisah dapat memiliki isi sama tanpa menjadi objek yang sama. Referensi perbandingan Python menjelaskan perbedaan tersebut.

Jalankan perbandingan dan ekspresi nilai bawaan

Simpan kode lengkap berikut sebagai conditions.py dengan encoding UTF-8. Gunakan Python 3.12 atau lebih baru dan jalankan python conditions.py di terminal lingkungan proyek. Tidak perlu paket tambahan atau berkas masukan.

amount = 8000
category = "food"
print(0 < amount <= 10000)
print(amount > 5000 and category == "food")
print(not category)
print("" or "unknown")
print(0 or 100)
print([] == [], [] is [])

Keluaran yang diharapkan:

True
True
False
unknown
100
True False

Jumlah 8000 memenuhi rentang positif sampai 10000 dan juga melebihi 5000 dengan kategori food. Karena nama kategori tidak kosong, not category menghasilkan False. String kosong pada ekspresi berikutnya membuat or memilih "unknown", dan nol membuatnya memilih 100. Dua literal list kosong pada baris terakhir memiliki isi sama, tetapi merupakan dua objek berbeda.

Pahami truthiness dan evaluasi hubung singkat

Truthiness adalah cara suatu nilai dinilai benar atau salah saat dipakai sebagai kondisi. String kosong, kumpulan kosong, nol, dan None dinilai salah. String "False" tidak kosong sehingga dinilai benar; bool("False") bukan cara membaca pengaturan teks yang bermakna “false”. Tentukan bentuk teks yang diterima dan aturan pembacaannya secara eksplisit.

and tidak mengevaluasi operand kanan jika operand kiri sudah bernilai salah. or tidak mengevaluasi operand kanan jika operand kiri sudah bernilai benar. Perilaku ini disebut evaluasi hubung singkat. Keduanya dapat mengembalikan operand yang dipilih: misalnya "food" and 8000 menghasilkan integer 8000, bukan True. Sebaliknya, not menghasilkan nilai boolean.

Aturan ini juga menentukan apakah suatu fungsi dipanggil. Pada False and check() atau True or check(), fungsi check tidak dijalankan. Jika Anda menjalankan print(False and print("called")), keluarannya hanya False, tanpa teks called. Jangan menempatkan validasi atau penyimpanan yang wajib dilakukan hanya pada operand yang mungkin dilewati.

Referensi pengujian nilai dan operator logika Python menjelaskan nilai operand yang dikembalikan dan evaluasi hubung singkat. Jika menggabungkan beberapa kondisi, gunakan tanda kurung ketika itu membantu memperjelas maksud aturan.

Pertahankan nol dan nilai kosong yang sah

amount or 100 memilih 100 meskipun amount adalah nol yang sah. Jika hanya None yang menandai ketiadaan, gunakan 100 if amount is None else amount. Nilai 0 akan tetap nol, sedangkan None menerima nilai bawaan. Ekspresi pendek seharusnya tidak mengubah makna data.

  1. Ubah amount menjadi 10000. Perbandingan rentang pada baris keluaran pertama tetap True. Dengan 10001, hasil pertama menjadi False; kondisi kedua tetap True karena tidak menguji batas atas.
  2. Coba amount = 0. Rentang contoh menolak nol karena memakai 0 < amount. Ini berbeda dari ekspresi nilai bawaan print(0 or 100), yang memilih 100 tanpa memeriksa aturan rentang.
  3. Kembalikan jumlah ke 8000, lalu ubah kategori menjadi string kosong. not category menjadi True dan pemeriksaan kategori food menjadi False.
  4. Pulihkan kedua nilai asli dan cocokkan lagi keenam baris keluaran.

Bandingkan isi list dengan == dan ketiadaan dengan is None. Jangan menyimpulkan sebuah aturan sudah benar hanya karena hasilnya cocok untuk satu nilai positif; uji batas rentang, nol, nilai kosong, dan data yang tidak ada menurut makna masing-masing.