Hampir setiap program perlu menghitung sesuatu: total belanja, sisa kuota, konversi satuan waktu, atau pajak transaksi. Operator aritmatika adalah alat Python untuk mengolah angka tersebut menjadi nilai baru. Pada Chapter ini kita akan membedah seluruh operator aritmatika beserta jebakan yang paling sering mengejutkan pemula, terutama perbedaan antara / dan // pada bilangan negatif.
Daftar Operator Aritmatika #
Python menyediakan tujuh operator aritmatika yang bekerja pada tipe int dan float:
| Operator | Nama | Contoh | Hasil |
|---|---|---|---|
+ | Penjumlahan | 7 + 3 | 10 |
- | Pengurangan | 7 - 3 | 4 |
* | Perkalian | 7 * 3 | 21 |
/ | True division | 7 / 3 | 2.3333333333333335 |
// | Floor division | 7 // 3 | 2 |
% | Modulo (sisa bagi) | 7 % 3 | 1 |
** | Pangkat | 7 ** 3 | 343 |
Mari kita lihat operator tersebut bekerja dalam sebuah perhitungan transaksi:
harga_satuan = 17500
jumlah = 3
total = harga_satuan * jumlah
pajak = total * 11 / 100
print("Total:", total)
print("Pajak:", pajak)Output yang Dihasilkan:
Total: 52500
Pajak: 5775.0Mari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 1 (
harga_satuan = 17500): variabelharga_satuandibuat dan menyimpan harga satu barang dalam rupiah. - Baris 2 (
jumlah = 3): variabeljumlahmenyimpan banyaknya barang yang dibeli. - Baris 4 (
total = harga_satuan * jumlah): interpreter Python membaca nilai kedua variabel, mengalikannya menjadi52500, lalu mengikat hasil tersebut ke variabeltotal. - Baris 5 (
pajak = total * 11 / 100): perkalian dan pembagian memiliki prioritas setara sehingga dievaluasi dari kiri ke kanan. Operator/selalu menghasilkanfloat, itulah sebabnyapajakbernilai5775.0, bukan5775. - Baris 7-8 (
print(...)): fungsiprint()mencetak nilaitotaldanpajakke terminal.
Operator + dan * juga dapat dipakai pada string, misalnya "ab" * 3 menghasilkan 'ababab'. Pembahasan lengkapnya kita simpan untuk Chapter Membuat dan Menggabungkan String.
True Division vs Floor Division #
Operator / (true division) selalu menghasilkan float dengan hasil pembagian yang sesungguhnya, sedangkan // (floor division) membulatkan hasil ke bawah menjadi bilangan bulat terdekat:
>>> 17 / 5
3.4
>>> type(17 / 5)
<class 'float'>
>>> 17 // 5
3
>>> type(17 // 5)
<class 'int'>Perbedaan keduanya menjadi penting pada bilangan negatif. Floor division membulatkan ke bawah menuju negatif tak hingga, bukan ke arah nol:
>>> -17 // 5
-4
>>> 17 // -5
-4Nilai -17 / 5 sesungguhnya adalah -3.4. Pembulatan ke bawah dari -3.4 adalah -4, bukan -3 seperti yang dipakai banyak bahasa pemrograman lain. Aturan “selalu ke bawah” ini menjaga hubungan matematis antara // dan % tetap konsisten.
Modulo dan divmod #
Operator % menghasilkan sisa pembagian. Untuk bilangan negatif, tanda hasil mengikuti tanda pembagi:
>>> 17 % 5
2
>>> -17 % 5
3
>>> 17 % -5
-3Hasil tersebut tetap memenuhi rumus a == (a // b) * b + (a % b). Sebagai contoh, -17 == (-4) * 5 + 3 memang benar. Operator % praktis untuk menguji bilangan genap atau ganjil, sedangkan floor division cocok untuk konversi satuan waktu seperti menit ke jam.
Fungsi bawaan divmod() mengembalikan pasangan hasil bagi dan sisa dalam satu langkah:
>>> divmod(17, 5)
(3, 2)
>>> hasil_bagi, sisa = divmod(17, 5)
>>> hasil_bagi
3
>>> sisa
2Nilai balik divmod(17, 5) adalah tuple (3, 2) — hasil bagi 3 dan sisa 2. Pola unpacking pada baris hasil_bagi, sisa = divmod(17, 5) memecah tuple tersebut menjadi dua variabel terpisah.
Operator Pangkat #
Operator ** mengangkat bilangan ke pangkat tertentu. Eksponen boleh berupa float untuk menghitung akar, atau bilangan negatif untuk kebalikan pangkat:
>>> 2 ** 10
1024
>>> 9 ** 0.5
3.0
>>> 2 ** -2
0.25Perhatikan bahwa 9 ** 0.5 menghitung akar kuadrat dan menghasilkan 3.0 bertipe float. Sifat asosiatif operator ** yang mengejutkan akan kita bahas tuntas pada Chapter Precedence dan Associativity.
Pembagian dengan Nol #
Pembagian apa pun dengan nol memicu exception ZeroDivisionError dan menghentikan program:
>>> 10 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 10 // 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 10 % 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer modulo by zeroInterpreter Python menolak operasi apa pun yang pembaginya nol, baik /, //, maupun %. Cara menangkap exception dengan try/except dibahas tuntas pada Section Exception Handling; untuk sekarang, pastikan nilai pembagi tidak pernah nol sebelum menghitung.