2.3. Operasi matematika

Python berfungsi sebagai kalkulator tanpa perlu konfigurasi tambahan. Halaman ini mencakup operator yang paling sering Anda gunakan: aritmatika pada angka, perbandingan yang menghasilkan boolean, operator logika yang menggabungkan kondisi, dan operator bitwise untuk pekerjaan tingkat perangkat keras.

2.3.1. Aritmatika

Operator aritmatika standar pada nilai int dan float:

  • + -- penjumlahan

  • - -- pengurangan (atau negasi, sebagai prefiks: -x)

  • * -- perkalian

  • / -- pembagian. Selalu mengembalikan float, meskipun kedua operand adalah bilangan bulat.

  • // -- pembagian lantai. Mengembalikan hasil bagi bilangan bulat yang dibulatkan ke arah minus-tak terhingga.

  • % -- modulo (sisa pembagian).

  • ** -- eksponensial (2 ** 10 adalah 1024).

>>> 7 / 2
3.5
>>> 7 // 2
3
>>> -7 // 2
-4
>>> 7 % 2
1
>>> 2 ** 16
65536

Aritmatika tipe campuran secara otomatis mempromosikan bilangan bulat ke float:

>>> 3 + 0.5
3.5

Penugasan yang diperkuat menggabungkan operator dengan = untuk pembaruan di tempat yang ringkas:

counter = 0
counter += 1                # equivalent to counter = counter + 1
counter *= 2                # works for *= /= //= %= **= too

Presedensi operator mengikuti urutan konvensional: ** pertama, lalu unary -, kemudian *, /, //, dan %, lalu + dan -. Gunakan tanda kurung jika Anda tidak yakin -- tidak ada biaya saat runtime.

2.3.2. Perbandingan

Operator perbandingan mengembalikan bool (True atau False):

  • == dan != -- sama / tidak sama.

  • <, <=, >, >= -- pengurutan.

>>> 3 == 3
True
>>> 3 == 3.0
True
>>> 3 < 5 <= 5
True

Contoh terakhir adalah perbandingan berantai dan persis setara dengan 3 < 5 and 5 <= 5.

Peringatan

= melakukan penugasan; == melakukan perbandingan. Ekspresi if x = 5: adalah kesalahan sintaks justru karena Python menolak untuk secara diam-diam mencampuradukkan keduanya.

2.3.3. Logika boolean

Tiga operator menggabungkan boolean:

  • and -- True hanya jika kedua sisi bernilai benar.

  • or -- True jika salah satu sisi bernilai benar.

  • not -- membalikkan satu nilai boolean.

and dan or melakukan short-circuit: mereka berhenti mengevaluasi segera setelah hasilnya sudah diketahui. False and slow_check() tidak pernah memanggil slow_check.

and dan or juga mengembalikan salah satu operandnya daripada literal True atau False, yang memungkinkan Anda menulis nilai default secara ringkas:

name = user_name or "anonymous"   # "" / 0 / None are falsy

2.3.4. Operator bitwise

Untuk pekerjaan perangkat keras -- mengemas bidang register, melakukan masking bit, mengurai header protokol -- Anda akan menggunakan operator bitwise. Operator ini bekerja pada representasi biner dari int:

  • & -- bitwise AND

  • | -- bitwise OR

  • ^ -- bitwise XOR

  • ~ -- bitwise NOT (komplemen satu)

  • << -- geser kiri

  • >> -- geser kanan

Bentuk literal heks dan biner sangat berguna saat membaca dan menulis ini:

>>> 0b1100 & 0b1010
8                              # 0b1000
>>> 0b1100 | 0b1010
14                             # 0b1110
>>> 0xFF ^ 0x0F
240                            # 0xF0
>>> 1 << 8
256
>>> (0xABCD >> 8) & 0xFF
171                            # extract the high byte

Bentuk yang diperkuat tersedia untuk masing-masing: |=, &=, ^=, <<=, >>=.

Catatan

and / or beroperasi pada boolean (atau nilai kebenaran); & / | beroperasi pada bit. Jangan mencampuradukkan keduanya. 0b1100 and 0b1010 dievaluasi menjadi 0b1010 karena kedua operand bersifat truthy -- bukan yang biasanya Anda inginkan saat memanipulasi bit.

2.3.5. Fungsi bawaan angka yang berguna

Beberapa fungsi bawaan mencakup operasi numerik umum yang tidak dapat dilakukan oleh operator saja:

  • round() -- bilangan bulat terdekat, atau tempat desimal ndigits terdekat jika argumen kedua diberikan. Mengembalikan int untuk round(x), dan float untuk round(x, n). Nilai tengah (0.5, 1.5, ...) dibulatkan ke bilangan genap terdekat, tidak selalu ke atas.

  • divmod() -- mengembalikan (quotient, remainder) dalam satu panggilan. Berguna untuk memecah satu jumlah menjadi satuan (detik menjadi menit-dan-detik, byte menjadi halaman-dan-offset).

  • pow() -- sama dengan ** dalam bentuk dua argumen. Bentuk tiga argumen pow(base, exp, mod) menghitung (base ** exp) % mod tanpa pernah membuat nilai antara yang sangat besar, yang merupakan satu-satunya cara praktis untuk melakukan eksponensial modular untuk eksponen besar.

>>> round(3.7)
4
>>> round(3.14159, 2)
3.14
>>> round(0.5)               # ties go to even, not always up
0
>>> round(1.5)
2

>>> divmod(125, 60)          # 125 seconds = 2 min, 5 sec
(2, 5)
>>> minutes, seconds = divmod(125, 60)

>>> pow(3, 4)                # same as 3 ** 4
81
>>> pow(3, 100, 7)           # (3 ** 100) mod 7, efficient
4

Konversi bilangan bulat ke string berbasis (bin, oct, hex) dibahas dalam Metode dan pemformatan string.

2.3.6. Modul math

Fungsi matematika umum ada di modul math. Impor sekali dan panggil fungsinya melalui nama bertitik:

import math

print(math.sqrt(2))              # 1.4142135
print(math.sin(math.pi / 2))     # 1.0
print(math.floor(3.7))           # 3
print(math.log(100, 10))         # 2.0

Modul MicroPython math mencakup fungsi yang biasa digunakan (sqrt, exp, log, sin, cos, tan, atan2, floor, ceil, pi, e, ...). Untuk angka acak, lihat modul random; untuk manipulasi bit bilangan bulat tetap, operator di atas biasanya sudah cukup.

2.3.7. Bilangan kompleks

Untuk pekerjaan numerik yang membutuhkan komponen imajiner, Python memiliki tipe complex dengan literal sufiks j (1 + 2j). Modul cmath mencerminkan math untuk input kompleks. Keduanya tersedia di sebagian besar build MicroPython tetapi jarang diperlukan untuk pekerjaan kamera; disebutkan terutama agar tidak mengejutkan jika Anda memport kode yang menggunakannya.