DataLens

Angka, operator matematika, dan konversi tipe

Lakukan aritmetika dengan int dan float, pahami tiga jenis pembagian, dan konversi antara teks dan angka dengan aman.

Level: Dasar · 10 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Idenya

Sebagian besar yang dihitung seorang data analyst adalah aritmetika: total, rata-rata, persentase, tingkat pertumbuhan, pajak. Python adalah kalkulator yang hebat, asalkan kamu tahu aturannya: tipe apa yang kamu dapatkan kembali, bagaimana pembagian bekerja, mengapa 0.1 + 0.2 tidak persis 0.3, dan bagaimana mengubah teks yang kamu baca dari file dan form menjadi angka yang bisa dihitung.

int dan float

Python punya dua tipe angka utama:

Kalau kamu mencampurnya, hasilnya float, karena float bisa menampung semua yang bisa ditampung int:

print(3 + 2)
print(3 + 2.0)
print(type(3 * 1.5))
5
5.0
<class 'float'>

Angka yang panjang lebih mudah dibaca dengan garis bawah, yang diabaikan Python: revenue = 12_500_000 sama dengan 12500000.

Operator aritmetika

OperatorArtinyaContohHasil
+tambah7 + 29
-kurang7 - 25
*kali7 * 214
/bagi7 / 23.5
//pembagian bulat ke bawah (floor)7 // 23
%sisa bagi (modulo)7 % 21
**pangkat7 ** 249

Python mengikuti urutan operasi yang biasa: tanda kurung, lalu pangkat, lalu *, /, //, %, lalu + dan -. Kalau ragu, tambahkan tanda kurung. Gratis, dan membuat maksudmu jelas:

price = 100000
discount = 0.1
print(price - price * discount)
print((price - 20000) * 2)
90000.0
160000

Tiga jenis pembagian

Di sinilah Python mengejutkan orang yang terbiasa dengan Excel.

/ selalu menghasilkan float, bahkan saat jawabannya bilangan bulat:

print(10 / 2)
5.0

// (floor division) memberikan bagian bilangan bulatnya, dibulatkan ke bawah, dan % (modulo) memberikan sisanya. Keduanya satu tim, cocok untuk membagi jumlah ke dalam kelompok:

minutes = 135
hours = minutes // 60
leftover = minutes % 60
print(f"{hours} h {leftover} min")

eggs = 26
print(f"{eggs // 12} full boxes, {eggs % 12} loose")
2 h 15 min
2 full boxes, 2 loose

% punya kegunaan sehari-hari lain: number % 2 == 0 bernilai True untuk bilangan genap, karena bilangan genap tidak bersisa saat dibagi 2.

Float tidak sepenuhnya presisi

Komputer menyimpan float dalam biner, dan banyak bilangan desimal tidak bisa disimpan dengan tepat. Biasanya kamu tidak akan menyadarinya, tapi kadang-kadang akan:

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
0.30000000000000004
0.3

Ini bukan bug Python; semua bahasa begitu. Aturan praktisnya:

Perhatikan bahwa round() tanpa argumen kedua mengembalikan int: round(4.6) adalah 5. Python membulatkan nilai yang tepat setengah ke bilangan genap terdekat, jadi round(2.5) adalah 2, yang mencegah total menjadi miring saat kamu membulatkan banyak nilai.

Fungsi bawaan praktis lainnya

Beberapa perhitungan begitu sering muncul sehingga Python menyediakannya langsung, siap dipakai tanpa perlu import apa pun. Kamu akan sering memakainya untuk hal seperti "seberapa besar perubahannya, tanpa peduli naik atau turun?" atau "mana yang lebih murah, pemasok ini atau yang itu?":

print(abs(-3500))           # jarak dari nol
print(min(95000, 65000))    # yang terkecil
print(max(4, 9, 2))         # yang terbesar
print(pow(2, 10))           # sama dengan 2 ** 10
3500
65000
9
1024

Untuk matematika lebih lanjut, import modul math:

import math

print(math.ceil(4.1))     # bulatkan KE ATAS ke bilangan bulat
print(math.floor(4.9))    # bulatkan KE BAWAH
print(math.sqrt(144))
5
4
12.0

Memperbarui variabel: += dan kawan-kawan

Program terus-menerus memperbarui sebuah nilai berdasarkan nilainya saat ini. Lima barang terjual, jadi stok berkurang 5. Kiriman datang, jadi stok bertambah 20. Menulis stock = stock - 5 setiap kali memang bisa, tapi karena sangat umum, Python punya versi yang lebih pendek. Masing-masing mengerjakan hitungannya lalu menyimpan hasilnya kembali ke variabel yang sama:

stock = 120
stock -= 5      # sama dengan stock = stock - 5
stock += 20     # sama dengan stock = stock + 20
stock *= 2      # sama dengan stock = stock * 2
print(stock)
270

Konversi antartipe

Data dari file, form, input(), dan .split() selalu datang sebagai teks. Kamu harus mengonversinya sebelum menghitung, dan Python tidak akan melakukannya untukmu:

quantity_text = "3"
print(quantity_text * 2)
print(int(quantity_text) * 2)
33
6

"3" * 2 tidak menghasilkan error, dan justru itulah yang membuatnya licik. Python melihat string dikali 2 lalu mengulangnya, menghasilkan "33", jadi jumlah 3 berubah menjadi 33 tanpa error apa pun. Mengonversinya dulu dengan int() menghasilkan 6 yang sebenarnya kamu mau. Ini fungsi-fungsi konversi yang akan kamu pakai:

Konversi gagal dengan jelas kalau teksnya bukan angka yang valid:

print(int("4.5"))
ValueError: invalid literal for int() with base 10: '4.5'

int() hanya menerima teks bilangan bulat. Untuk mendapatkan int dari "4.5", lewati float dulu: int(float("4.5")). Dan buang simbol-simbol dulu: int("Rp 95.000") gagal sampai kamu membuang "Rp " dan titik-titiknya, seperti yang kamu lakukan di modul sebelumnya.

Mengapa ini penting untuk kode bersih

Dua kebiasaan mencegah sebagian besar bug angka. Pertama, konversi di perbatasan: ubah teks menjadi angka saat ia masuk ke programmu, sehingga semua yang setelahnya bekerja dengan angka sungguhan. Kedua, sebutkan satuannya: price_rupiah, duration_minutes, vat_rate. Variabel bernama time bisa berisi detik, menit, atau tanggal; duration_minutes tidak mungkin salah dibaca.

Rangkuman

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: Boolean dan operator perbandingan →