Menghitung total belanja, membagi tagihan patungan, menyaring menu yang harganya masuk anggaran — semuanya dibangun dari operator. Operator adalah simbol yang menggabungkan nilai menjadi nilai baru: aritmatika menghasilkan angka, perbandingan menghasilkan nilai kebenaran, dan logika menggabungkan beberapa nilai kebenaran menjadi satu keputusan. Pada chapter ini kita mempelajari ketiganya memakai data kecil bernuansa warung kopi, termasuk dua operator yang kelak sering kita pakai untuk mengelompokkan data ke dalam rentang: pembagian bulat // dan sisa bagi %.

Operator Aritmatika #

Python menyediakan tujuh operator aritmatika. Empat yang pertama sudah akrab dari sekolah; tiga sisanya justru yang paling sering membedakan pemula dan pengguna data yang cakap:

OperatorNamaContohHasil
+penjumlahan24000 + 900033000
-pengurangan28000 - 300025000
*perkalian24000 * 372000
/pembagian72000 / 324000.0
//pembagian bulat85000 // 712142
%sisa bagi85000 % 76
**pemangkatan2 ** 101024

Satu perilaku penting: operator / selalu menghasilkan float, sekalipun kedua bilangannya bulat dan habis dibagi. Mari kita terapkan semuanya pada satu transaksi:

python
harga_kopi_susu = 24000
harga_matcha = 28000
ongkos_kirim = 9000

total = harga_kopi_susu * 2 + harga_matcha + ongkos_kirim
print("Total belanja:", total)

patungan = total / 5
print("Patungan 5 orang:", patungan)

pertumbuhan_tahunan = 1.05
target_tahun_depan = round(total * pertumbuhan_tahunan ** 3)
print("Target 3 tahun ke depan:", target_tahun_depan)

Output yang Dihasilkan:

text
Total belanja: 85000
Patungan 5 orang: 17000.0
Target 3 tahun ke depan: 98398

Bedah singkat skrip di atas:

  1. Baris 5: perkalian dihitung lebih dulu daripada penjumlahan, sehingga total adalah 48000 + 28000 + 9000 = 85000 — bukan 54000 * 2.
  2. Baris 8: pembagian / menghasilkan 17000.0 bertipe float meski hasilnya matematis bulat.
  3. Baris 11-12: pemangkatan ** memodelkan pertumbuhan majemuk — 1.05 ** 3 berarti “tumbuh 5 persen per tahun selama tiga tahun”. Hasil pecahan 98398.125 dibulatkan round() menjadi 98398.

Pembagian Bulat dan Sisa Bagi untuk Data #

Operator // membuang bagian pecahan dan mengambil bilangan bulat terbesar yang tidak melebihi hasil, sedangkan % mengambil sisanya. Keduanya seperti dua sisi satu pembagian: 85000 // 7 adalah 12142 dan 85000 % 7 adalah 6, karena 7 × 12142 = 84994 bersisa 6. Untuk patungan tujuh orang dengan tagihan Rp85.000, berarti tiap orang membayar Rp12.142 dan ada Rp6 menganggur yang biasanya ditanggung si pemesan:

python
tagihan = 85000
jumlah_orang = 7

print("Bagian utama   :", tagihan // jumlah_orang)
print("Sisa pembagian :", tagihan % jumlah_orang)

Output yang Dihasilkan:

text
Bagian utama   : 12142
Sisa pembagian : 6

Pasangan // dan % juga menjadi dasar pengelompokan data ke dalam wadah rentang (binning sederhana). Triknya: bagi harga dengan lebar rentang, ambil hasil bulatnya sebagai nomor kelompok. Harga 35000 dengan lebar rentang Rp10.000 jatuh ke kelompok 3, yaitu rentang 30-39 ribuan:

python
harga_transaksi = [35000, 7200, 125000, 48000, 26000]

for harga in harga_transaksi:
    kelompok = harga // 10000
    sisa = harga % 10000
    print(f"Rp{harga:>7,} -> rentang {kelompok * 10}-{kelompok * 10 + 9} ribuan (sisa Rp{sisa:,})")

Output yang Dihasilkan:

text
Rp 35,000 -> rentang 30-39 ribuan (sisa Rp5,000)
Rp  7,200 -> rentang 0-9 ribuan (sisa Rp7,200)
Rp125,000 -> rentang 120-129 ribuan (sisa Rp5,000)
Rp 48,000 -> rentang 40-49 ribuan (sisa Rp8,000)
Rp 26,000 -> rentang 20-29 ribuan (sisa Rp6,000)

Dua baris inti skrip di atas: harga // 10000 menghasilkan nomor kelompok (misalnya 35000 // 10000 = 3), lalu nomor tersebut dikalikan kembali 10 untuk menuliskan batas bawah rentangnya. Ketika nanti kita memakai pandas dan NumPy, pengelompokan seperti ini digantikan fungsi siap pakai — tetapi memahami // dan % membuat kita tahu apa yang sebenarnya terjadi di baliknya.

Operator Perbandingan #

Perbandingan menghasilkan bool — nilai True atau False — dan menjadi bahan bakar penyaringan data:

OperatorArtiContohHasil
==sama dengan24000 == 24000True
!=tidak sama dengan28000 != 24000True
>lebih besar dari28000 > 24000True
<lebih kecil dari15000 < 24000True
>=lebih besar atau sama dengan24000 >= 25000False
<=lebih kecil atau sama dengan15000 <= 15000True

Python juga mengizinkan perbandingan berantai seperti 15000 <= harga <= 26000 yang dibaca “harga berada di antara 15000 dan 26000”. Mari kita lihat hasil perbandingan sebagai nilai yang bisa dicetak:

python
harga_kopi_susu = 24000
harga_matcha = 28000

print(harga_kopi_susu < harga_matcha)
print(harga_kopi_susu == 24000)
print(harga_matcha != 28000)
print(harga_kopi_susu >= 25000)

Output yang Dihasilkan:

text
True
True
False
False

Operator Logika: and, or, not #

Satu kondisi jarang cukup untuk keputusan nyata. Operator logika menggabungkan beberapa kondisi: and menuntut semuanya benar, or cukup salah satu benar, dan not membalik nilai kebenaran. Contoh penerapannya adalah menyaring menu warung kopi berdasarkan harga sekaligus stok:

python
menu = ["Kopi Susu", "Matcha Latte", "Teh Tawar", "Kopi Tubruk"]
harga = [24000, 28000, 15000, 18000]
stok = [12, 3, 20, 0]

for nama, nilai_harga, sisa_stok in zip(menu, harga, stok):
    sesuai_harga = 15000 <= nilai_harga <= 26000
    if sesuai_harga and sisa_stok > 0:
        print(f"Cocok      : {nama} (Rp{nilai_harga:,}, stok {sisa_stok})")
    if not sisa_stok > 0:
        print(f"Stok habis : {nama}")

Output yang Dihasilkan:

text
Cocok      : Kopi Susu (Rp24,000, stok 12)
Cocok      : Teh Tawar (Rp15,000, stok 20)
Stok habis : Kopi Tubruk

Mari kita bedah logikanya:

  1. Baris 5: zip() memasangkan tiga daftar yang sejajar — nama, harga, dan stok untuk menu yang sama — sehingga satu perulangan mengambil ketiganya sekaligus.
  2. Baris 6: perbandingan berantai menilai apakah harga masuk rentang Rp15.000-26.000, hasilnya disimpan sebagai bool.
  3. Baris 7-8: menu dicatat “cocok” hanya bila harganya sesuai dan stoknya tersedia — Kopi Tubruk lolos rentang harga tetapi gagal karena stoknya nol.
  4. Baris 9-10: not membalik sisa_stok > 0; bila stok habis, not False menjadi True dan menu tersebut dilaporkan terpisah.

Pola kondisi and kondisi pada baris 7 inilah bentuk awal dari filter data: kelak di pandas, ungkapan yang sangat serupa (df[(df["harga"] <= 26000) & (df["stok"] > 0)]) menyaring ribuan baris sekaligus.

Prioritas Operator #

Saat operator bercampur dalam satu ekspresi, Python mengevaluasinya menurut urutan baku — perkalian dan pembagian sebelum penjumlahan dan pengurangan, pemangkatan sebelum keduanya, lalu perbandingan dan logika paling akhir:

python
print(2 + 3 * 4)
print((2 + 3) * 4)

harga = 30000
potongan_persen = 10
harga_setelah_potong = harga - harga * potongan_persen / 100
print(harga_setelah_potong)

Output yang Dihasilkan:

text
14
20
27000.0

Baris pertama menghasilkan 14 karena 3 * 4 dihitung lebih dulu; tanda kurung pada baris kedua mengubah urutnya menjadi 20. Baris terakhir memperlihatkan urutan yang benar untuk potongan harga: harga * 10 / 100 dihitung lebih dulu (3000), baru dikurangkan dari 30000 — hasilnya 27000.0 karena pembagian / menghasilkan float.

Referensi Resmi #

Rangkuman #

  • Tujuh operator aritmatika: +, -, *, / (selalu menghasilkan float), // (pembagian bulat), % (sisa bagi), dan ** (pemangkatan untuk pertumbuhan majemuk).
  • // dan % memungkinkan binning manual: harga // 10000 menghasilkan nomor kelompok rentang 10 ribuan.
  • Operator perbandingan menghasilkan bool; perbandingan berantai seperti 15000 <= harga <= 26000 membaca rentang secara alami.
  • and, or, dan not menggabungkan kondisi — pola dasar dari penyaringan data.
  • Prioritas operator mengikuti urutan baku; tanda kurung dipakai untuk memaksa urutan sekaligus memperjelas niat.

Nilai bisa dihitung dan disaring, tetapi hasilnya baru jadi keputusan setelah program memilih tindakan: memberi diskon atau tidak, mengirim gratis ongkir atau menagih ongkir. Pemilihan itulah pekerjaan percabangan, yang kita bahas pada chapter Percabangan .