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.
- Ubah
amountmenjadi10000. Perbandingan rentang pada baris keluaran pertama tetapTrue. Dengan10001, hasil pertama menjadiFalse; kondisi kedua tetapTruekarena tidak menguji batas atas. - Coba
amount = 0. Rentang contoh menolak nol karena memakai0 < amount. Ini berbeda dari ekspresi nilai bawaanprint(0 or 100), yang memilih100tanpa memeriksa aturan rentang. - Kembalikan jumlah ke
8000, lalu ubah kategori menjadi string kosong.not categorymenjadiTruedan pemeriksaan kategorifoodmenjadiFalse. - 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.




