Dua jenis angka, satu jenis kebenaran
Tipe angka yang akan kamu pakai sehari-hari adalah int dan float, ditambah bool untuk nilai benar/salah. Ketiganya sudah cukup untuk hampir semua aritmetika dan logika yang dibutuhkan program Python biasa.
Python kadang menyebut boolean sebagai subtipe dari integer: True secara harfiah adalah 1 dan False secara harfiah adalah 0. Ini membuka beberapa trik berguna nanti.
Aritmetika integer
Integer di Python tidak pernah overflow. Kedengarannya tidak penting sampai kamu menulis fungsi faktorial pertamamu dan sadar bahwa kebanyakan bahasa lain pasti sudah diam-diam berputar menjadi angka negatif.
Keduanya menghasilkan jawaban yang persis, sebesar apa pun angkanya. Batasnya hanya memori.
Operator aritmetikanya sesuai dugaanmu, ditambah beberapa:
Tiga hal yang perlu diingat dari daftar itu:
/selalu mengembalikan float di Python 3, bahkan kalau kedua sisinya integer.10 / 2menghasilkan5.0, bukan5. Kalau kamu ingin integer, pakai//.//membulatkan ke arah minus tak hingga, jadi-7 // 2adalah-4, bukan-3. Tidak biasa, tapi konsisten.%memberi sisa bagi, dan berguna untuk "apakah angka ini genap?" (n % 2 == 0) serta untuk berputar dalam rentang tetap.
Float dan jebakannya yang terkenal
Float memang tidak sempurna dari sananya. Float disimpan dalam biner, yang tidak bisa menyimpan kebanyakan pecahan desimal secara persis. Contoh klasiknya:
Baris pertama mencetak 0.30000000000000004. Baris kedua mencetak False. Setiap bahasa yang mengikuti standar IEEE 754 (Python, JavaScript, Java, C) berperilaku seperti ini. Ini bukan bug Python.
Dalam praktiknya, ini berarti dua hal:
- Jangan membandingkan float dengan
==. Kalau kamu butuh "cukup dekat", pakaimath.isclose(a, b)atau cek apakahabs(a - b) < some_tolerance. - Untuk uang, pakai
decimal.Decimal. Moduledecimaldi standard library memberi aritmetika desimal yang persis, tanpa kejutan seperti0.1 + 0.2. Ia lebih lambat daripada float, itulah sebabnya ia bukan bawaan, tapi ia pilihan yang tepat untuk mata uang.
Konversi antartipe angka
Python tidak akan diam-diam mengubah integer menjadi string atau string menjadi angka. Kamu harus memintanya secara eksplisit:
Konversi yang tidak valid memunculkan ValueError:
>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'
Pesan error-nya lugas dan mudah ditindaklanjuti. Bersihkan input-nya atau tangkap exception-nya.
Boolean, sedikit lebih dalam
True dan False adalah dua nilai boolean, ditulis persis seperti itu dengan huruf kapital di depan. Kebanyakan perbandingan menghasilkan salah satunya:
Operator boolean-nya adalah and, or, dan not, ditulis sebagai kata bahasa Inggris, bukan simbol:
Satu detail halus yang berguna untuk diketahui: and dan or tidak selalu mengembalikan True atau False; keduanya mengembalikan nilai yang menentukan hasil ekspresi. 0 or "fallback" mengembalikan "fallback"; 5 and 10 mengembalikan 10. Dengan ini kamu bisa menulis nilai default singkat seperti name = user_input or "anonymous", dan hal ini juga perlu dipahami kalau suatu saat pengecekan boolean memberimu tipe yang tidak terduga.
Truthy dan falsy
Python memperlakukan banyak nilai sebagai "agak benar" atau "agak salah" saat kamu memakainya dalam konteks boolean seperti if atau while. Nilai-nilai yang falsy adalah:
False0,0.0None- Container kosong:
"",[],{},set(),()
Semua yang lain truthy. Dengan begitu pengecekanmu terbaca lebih alami:
Baca if name: sebagai "jika name berisi sesuatu". Jauh lebih rapi daripada if name != "":. Hanya saja, hati-hati dengan angka: if count: akan memperlakukan 0 sebagai "lewati", dan itu biasanya, tapi tidak selalu, yang kamu mau. Kalau nol adalah nilai yang sah, pakai if count is not None: sebagai gantinya.
Aritmetika boolean
Karena boolean adalah integer, kamu bisa melakukan aritmetika dengannya:
Trik itu cukup sering muncul sehingga layak diingat. Kalau kamu ingin menghitung berapa banyak item di sebuah list yang lolos suatu uji, jumlahkan generator yang mengembalikan boolean:
Pelajaran praktisnya
- Integer tidak pernah overflow. Pakai dengan bebas.
/mengembalikan float; pakai//kalau kamu ingin pembagian integer.- Jangan membandingkan float dengan
==; bandingkan dengan toleransi, atau pakaiDecimaluntuk uang. - Truthiness membuat kondisi lebih enak dibaca, asal kamu ingat bahwa
0dan string kosong itu falsy.
Berikutnya: input dan print, dua alat yang mengubah skripmu dari program yang diam menjadi percakapan.
Pertanyaan yang sering diajukan
Apa bedanya int dan float di Python?
Int adalah bilangan bulat tanpa titik desimal; float adalah bilangan dengan titik desimal. Integer di Python bisa sebesar apa pun, tidak ada overflow. Float mengikuti aturan standar IEEE 754, artinya float bisa kehilangan sedikit presisi pada aritmetika desimal.
Kenapa 0.1 + 0.2 tidak sama dengan 0.3 di Python?
Karena bilangan floating-point biner tidak bisa menyimpan kebanyakan desimal secara persis. 0.1 + 0.2 menghasilkan 0.30000000000000004. Ini bukan bug Python: setiap bahasa dengan float IEEE 754 berperilaku sama. Untuk matematika desimal yang persis, pakai module decimal.
Apa itu nilai truthy dan falsy di Python?
Python memperlakukan banyak nilai sebagai benar atau salah dalam konteks boolean, meskipun nilainya bukan True atau False secara harfiah. Nol, string kosong, list kosong, dict kosong, dan None itu falsy; sebagian besar nilai lain truthy. if my_list: dibaca sebagai "jika list itu berisi sesuatu".