Dasar

Operator Python: aritmetika, pembagian // dan %, perbandingan, and/or/not dan python round

Diperbarui: · Skillaria.Top

Operator / di Python selalu menghasilkan float, // membagi bulat dengan pembulatan ke bawah, % adalah sisa bagi, dan ** adalah pangkat. Fungsi round(x, n) membulatkan ke n angka desimal secara banker's rounding: round(2.5) hasilnya 2, round(3.5) hasilnya 4; pembulatan ke atas dan ke bawah ke bilangan bulat dilakukan oleh math.ceil dan math.floor, nilai mutlak oleh abs.

Operator Python adalah simbol yang mengubah nilai menjadi nilai baru: + menjumlahkan, // membagi bulat, and menggabungkan kondisi. Di bawah ini daftar lengkap operator beserta contohnya, perbedaan / dan //, logika and, or, not, serta fungsi pembulatan: python round, math.ceil, math.floor, dan abs. Semua contoh bisa langsung dicoba di REPL.

Daftar operator Python

Operator dikelompokkan menurut fungsinya. Tidak perlu menghafal seluruh tabel: di kode sehari-hari yang paling sering muncul adalah aritmetika, perbandingan, dan penghubung logika.

KelompokOperatorContoh
Aritmetika+ - * / // % **7 // 2 → 3
Perbandingan== != < > <= >=3 < 5 → True
Logikaand or notnot True → False
Identitasis, is notx is None
Keanggotaanin, not in"kopi" in "kopi susu" → True
Penugasan= += -= *= /= //= %= **=total += 250
Walrus:=if (n := len(s)) > 10:
Bitwise& | ^ ~ << >>5 & 3 → 1

Operator aritmetika

Penjumlahan, pengurangan, dan perkalian bekerja seperti di sekolah. Jika salah satu operand adalah float, hasilnya juga float: 2 + 1.0 menghasilkan 3.0. Bilangan bulat di Python tidak mengalami overflow — 2 ** 100 dihitung dengan tepat, berapa pun jumlah digitnya.

>>> 250 + 120
370
>>> 12.5 * 3
37.5
>>> 2 ** 10
1024
>>> 2 ** 0.5
1.4142135623730951

Pangkat di Python: operator **

Pangkat ditulis dengan dua tanda bintang, bukan ^: di Python ^ adalah XOR bitwise, sehingga 2 ^ 3 menghasilkan 1, bukan 8. Pangkat pecahan menghasilkan akar: 9 ** 0.5 sama dengan 3.0. Ada juga fungsi pow(x, y) — hasilnya sama, dengan tambahan argumen ketiga untuk sisa bagi: pow(2, 10, 1000) menghasilkan 24.

Perhatikan prioritas: ** dikerjakan sebelum minus unary, sehingga -2 ** 2 sama dengan -4. Untuk mengkuadratkan bilangan negatif, tulis kurung: (-2) ** 2.

Pembagian di Python: /, // dan %

Di Python ada dua jenis pembagian, dan inilah sumber kejutan terbesar bagi pemula. Pembagian biasa / selalu menghasilkan float, bahkan jika hasilnya bulat. Pembagian bulat // membuang bagian desimal, sedangkan % menghasilkan sisa bagi.

>>> 7 / 2
3.5
>>> 8 / 2
4.0
>>> 7 // 2
3
>>> 7 % 2
1

Pembagian bulat // dan sisa bagi %: praktik

Pasangan // dan % menjawab pertanyaan «berapa utuh dan berapa sisanya». Di kursus, pelacak pengeluaran menyimpan uang dalam satuan terkecil agar tidak kehilangan ketelitian, lalu memisahkan jumlahnya menjadi rupiah dan sen:

cents = 125050            # simpan uang dalam sen
whole = cents // 100      # 1250 — bagian utuh
rest = cents % 100        # 50 — sisa
print(whole, rest)        # 1250 50

print(40 // 7, "minggu dan", 40 % 7, "hari")   # 5 minggu dan 5 hari

Kedua hasil sekaligus diberikan oleh fungsi bawaan divmod: divmod(125050, 100) menghasilkan tuple (1250, 50). Sisa bagi juga berguna untuk mengecek bilangan genap: n % 2 == 0 bernilai benar untuk bilangan genap.

Bilangan negatif: // membulatkan ke bawah

Operator // tidak sekadar membuang pecahan, melainkan membulatkan ke bawah, menuju minus tak hingga. Untuk bilangan positif tidak ada bedanya, tetapi untuk bilangan negatif berbeda. Tanda sisa bagi % di Python mengikuti tanda pembaginya, sehingga selalu berlaku a == (a // b) * b + a % b.

>>> -7 // 2
-4
>>> -7 % 2
1
>>> int(-7 / 2)     # membuang pecahan, bukan membulatkan ke bawah
-3

Pembagian dengan nol: error apa yang muncul

Pembagian dengan nol oleh ketiga operator tersebut memunculkan exception ZeroDivisionError. Ini berlaku untuk bilangan bulat maupun pecahan. Error bisa ditangkap dengan try/except, atau diperiksa lebih dulu dengan mengecek pembaginya.

>>> 10 / 0
Traceback (most recent call last):
  ...
ZeroDivisionError: division by zero
>>> count = 0
>>> avg = 1500 / count if count else 0
>>> avg
0

Operator perbandingan

Perbandingan menghasilkan True atau False. Kesamaan diperiksa dengan dua tanda ==, sedangkan satu = adalah penugasan. String dibandingkan karakter demi karakter berdasarkan kode karakternya, sehingga "B" < "a" benar: huruf kapital berada sebelum huruf kecil.

>>> 250 == 250.0
True
>>> 3 != 4
True
>>> 1 < 5 <= 10     # rantai: 1 < 5 and 5 <= 10
True
>>> 0.1 + 0.2 == 0.3
False

Rantai perbandingan seperti 0 <= x < 100 adalah fitur praktis Python: tidak perlu menulis and. Baris terakhir mengingatkan tentang ketidaktepatan bilangan pecahan: 0.1 + 0.2 menghasilkan 0.30000000000000004. Bandingkan bilangan pecahan dengan math.isclose(a, b), dan simpan uang dalam sen atau dengan Decimal.

Operator logika and, or, not

Operator logika di Python ditulis sebagai kata, bukan simbol && dan || seperti di bahasa lain. and benar jika kedua sisinya benar, or benar jika salah satunya benar, dan not membalik nilai.

aba and ba or bnot a
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

Prioritas: pertama not, lalu and, lalu or. Ekspresi True or False and False bernilai True, karena and dikerjakan lebih dulu. Pada kondisi yang rumit, gunakan kurung — lebih jelas bagi Anda maupun rekan kerja.

Apa sebenarnya yang dikembalikan and dan or

and dan or tidak selalu mengembalikan True atau False, melainkan salah satu operand. or mengembalikan nilai benar pertama (atau yang terakhir jika tidak ada yang benar), and mengembalikan nilai salah pertama (atau yang terakhir). Nilai yang dianggap salah adalah 0, 0.0, string kosong, koleksi kosong, None, dan False.

>>> name = ""
>>> name or "Tamu"
'Tamu'
>>> 5 and 0
0
>>> not ""
True

Evaluasinya malas: jika hasil sudah pasti dari sisi kiri, sisi kanan tidak dihitung. Karena itu count and total / count tidak akan gagal dengan pembagian nol saat count == 0. Operator not, berbeda dengan dua lainnya, selalu mengembalikan bool.

Operator is dan in

== membandingkan nilai, sedangkan is memeriksa apakah dua nama menunjuk ke objek yang sama. Dua keranjang kosong yang berbeda itu sama, tetapi bukan satu objek. Satu-satunya tempat is dipakai terus-menerus adalah pemeriksaan None: if x is None.

>>> a = [250, 120]
>>> b = [250, 120]
>>> a == b, a is b
(True, False)
>>> c = a
>>> c is a
True

Jangan membandingkan angka dan string dengan is: kadang hasilnya tampak benar karena cache objek internal, tetapi itu bergantung pada implementasi, dan Python memberi SyntaxWarning untuk konstruksi seperti x is 5.

Operator in memeriksa keanggotaan: substring dalam string, elemen dalam list, kunci dalam dictionary. not in adalah kebalikannya.

>>> "kopi" in "kopi susu"
True
>>> "makanan" in {"makanan": 450, "taksi": 300}
True
>>> 5 not in [1, 2, 3]
True

Operator penugasan dan operator walrus :=

Operator gabungan +=, -=, *=, //=, dan lainnya adalah singkatan: total += 250 berarti total = total + 250. Python tidak punya ++ dan --: menulis x++ menghasilkan error sintaksis.

Operator walrus := (dinamai karena menyerupai mata dan gading walrus) memberikan nilai langsung di dalam ekspresi. Ini berguna ketika nilai perlu diperiksa sekaligus dipakai:

items = ["kopi", "taksi", "makan siang", "bioskop"]
if (n := len(items)) > 3:
    print(f"Terlalu banyak pengeluaran: {n}")

while (line := input("Jumlah: ")) != "":
    print(int(line) * 2)

Tanpa walrus, len harus dipanggil dua kali atau penugasannya ditulis di baris terpisah. Jangan berlebihan memakainya: jika baris menjadi sulit dibaca, penugasan biasa lebih baik.

Pembulatan di Python: round, ceil, floor

Untuk pembulatan, Python menyediakan fungsi bawaan round dan fungsi dari modul math. Keduanya memecahkan masalah yang berbeda, dan sering tertukar.

FungsiApa yang dilakukan2.5-2.52.7
round(x)ke yang terdekat, separuh ke angka genap2-23
math.floor(x)ke bawah, menuju minus tak hingga2-32
math.ceil(x)ke atas, menuju plus tak hingga3-23
math.trunc(x), int(x)membuang pecahan, menuju nol2-22

Fungsi round di Python dan pembulatan banker

Fungsi round(x, n) membulatkan sampai n angka di belakang koma; tanpa argumen kedua, hasilnya bilangan bulat int. Jebakan utamanya: python round membulatkan secara «banker's rounding» — separuh ke angka genap terdekat. Karena itu round(2.5) menghasilkan 2, dan round(3.5) menghasilkan 4. Dengan cara ini kesalahan pembulatan tidak menumpuk ke satu arah pada perhitungan besar.

>>> round(2.5), round(3.5)
(2, 4)
>>> round(3.14159, 2)
3.14
>>> round(1250, -2)     # ke ratusan
1200
>>> round(2.675, 2)     # bukan 2.68: dalam biner nilainya 2.67499...
2.67

Jika Anda membutuhkan pembulatan «separuh ke atas» yang biasa dipakai di struk, gunakan Decimal dengan mode ROUND_HALF_UP. Berikan angkanya sebagai string agar tidak ikut membawa galat float:

>>> from decimal import Decimal, ROUND_HALF_UP
>>> Decimal("2.5").quantize(Decimal("1"), ROUND_HALF_UP)
Decimal('3')
>>> Decimal("2.675").quantize(Decimal("0.01"), ROUND_HALF_UP)
Decimal('2.68')

Ada satu aturan lagi dari kursus: bulatkan hanya saat menampilkan. Untuk cetakan yang rapi tidak perlu round — cukup f-string: f"{amount:.2f}" menampilkan dua angka di belakang koma, sementara nilainya tetap tepat.

math.ceil dan math.floor: pembulatan ke atas dan ke bawah

math.ceil dibutuhkan ketika «kurang» tidak boleh terjadi: berapa bus yang harus dipesan, berapa halaman yang dibutuhkan. math.floor dipakai saat hanya satuan penuh yang dihitung. Kedua fungsi mengembalikan int.

import math

guests = 47
seats = 20
print(math.ceil(guests / seats))   # 3 bus
print(math.floor(9.99))            # 9
print(-(-guests // seats))         # 3 — ceil tanpa math, dengan trik //

Modul math punya fungsi berguna lain: math.sqrt (akar), math.isclose (perbandingan pecahan), math.pi, math.gcd. Di Python 3.15 muncul submodul math.integer (PEP 791) untuk matematika bilangan bulat: di dalamnya ada comb, factorial, gcd, isqrt, lcm, perm, sedangkan math.gcd dan yang lain tetap berfungsi.

Fungsi abs: nilai mutlak

abs(x) mengembalikan nilai mutlak — jarak dari nol tanpa tanda. Tidak perlu impor, fungsinya bawaan. Berlaku untuk bilangan bulat, pecahan, bahkan kompleks: untuk 3+4j hasilnya panjang vektornya, yaitu 5.0.

>>> abs(-250)
250
>>> abs(-12.5)
12.5
>>> budget, spent = 5000, 5320
>>> abs(budget - spent)    # seberapa jauh meleset
320

Penggunaan tipikalnya adalah selisih tanpa memperhatikan arah, dan perbandingan dengan toleransi: abs(a - b) < 0.001. Untuk pecahan, math.isclose lebih andal karena memperhitungkan skala bilangan.

Prioritas operator

Ketika ada beberapa operator dalam satu ekspresi, Python mengerjakannya menurut prioritas — dari yang tertinggi ke yang terendah:

  1. **
  2. unary -x, +x, ~x
  3. * / // %
  4. + -
  5. pergeseran dan operasi bitwise
  6. perbandingan, in, is
  7. not
  8. and
  9. or
  10. :=

Jadi 2 + 3 * 4 sama dengan 14, sedangkan (2 + 3) * 4 sama dengan 20. Jika ragu, tulis kurung: kurung berlebih tidak merugikan, tetapi kesalahan prioritas sulit dicari.

Kesalahan umum dengan operator

KesalahanYang terjadiCara yang benar
if x = 5:SyntaxError: ini penugasanif x == 5:
2 ^ 3 sebagai pangkatXOR bitwise, hasilnya 12 ** 3
mengharapkan bilangan bulat dari 8 / 2mendapat 4.08 // 2
x == 1 or 2selalu benar: or 2x in (1, 2)
mengharapkan 3 dari round(2.5)banker's rounding menghasilkan 2Decimal dengan ROUND_HALF_UP
"5" + 5TypeErrorint("5") + 5

Kesimpulan

Ingat hal utamanya: / selalu menghasilkan float, // membulatkan ke bawah, % menghasilkan sisa bagi dengan tanda pembagi, dan pangkat adalah **. Operator logika and, or, not ditulis sebagai kata dan dievaluasi secara malas, sedangkan is diperlukan untuk pemeriksaan None. Fungsi python round membulatkan ke angka genap, untuk pembulatan ke atas dan ke bawah ada math.ceil dan math.floor, dan nilai mutlak diberikan oleh abs. Di kursus, operator ini dipraktikkan pada pelacak pengeluaran, tempat uang disimpan dalam satuan sen.

Pertanyaan umum

Bagaimana membulatkan angka di Python sampai dua angka di belakang koma?

Gunakan round(x, 2). Jika hanya ingin menampilkannya dengan rapi, pakai f-string f"{x:.2f}", yang tidak mengubah nilai aslinya.

Mengapa round(0.5) di Python menghasilkan 0?

Karena round membulatkan separuh ke angka genap terdekat, dan 0 adalah genap; demikian pula round(1.5) dan round(2.5) menghasilkan 2.

Bagaimana mendapatkan bagian bulat dari pembagian di Python?

Dengan operator //: 17 // 5 menghasilkan 3. Untuk bilangan negatif operator ini membulatkan ke bawah, sehingga -17 // 5 menghasilkan -4; jika ingin membuang pecahan menuju nol, gunakan int(-17 / 5).

Apakah Python punya operator ternary?

Ya, berupa ekspresi kondisional: nilai_jika_benar if kondisi else nilai_jika_salah, misalnya "genap" if n % 2 == 0 else "ganjil".

Apa beda & dan and di Python?

and adalah operator logika dengan evaluasi malas, sedangkan & adalah AND bitwise untuk angka dan irisan untuk himpunan; dalam kondisi if gunakan and.

Pelajari topik ini lewat video

Topik ini dibahas mendalam dengan praktik di kursus “Python 3.15: от новичка до профи”.

Ke kursus