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:
intuntuk bilangan bulat:3,-12,95000floatuntuk bilangan dengan titik desimal:4.7,0.11,3.0
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
| Operator | Artinya | Contoh | Hasil |
|---|---|---|---|
+ | tambah | 7 + 2 | 9 |
- | kurang | 7 - 2 | 5 |
* | kali | 7 * 2 | 14 |
/ | bagi | 7 / 2 | 3.5 |
// | pembagian bulat ke bawah (floor) | 7 // 2 | 3 |
% | sisa bagi (modulo) | 7 % 2 | 1 |
** | pangkat | 7 ** 2 | 49 |
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:
- Pakai
round(value, digits)saat menampilkan atau menyimpan hasil akhir. - Jangan membandingkan float langsung dengan
==. Bandingkan nilai yang sudah dibulatkan, atau cek bahwa selisihnya sangat kecil. - Uang biasanya paling aman disimpan sebagai
intdalam satuan terkecil (Rupiah utuh di sini), atau dengan moduldecimalPython untuk pekerjaan akuntansi.
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:
int("42")mengubah teks menjadi int.int(4.9)mengubah float menjadi int dengan memotong desimalnya (menghasilkan4, bukan5).float("4.75")mengubah teks menjadi float.str(95000)mengubah angka menjadi teks.
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
intuntuk bilangan bulat,floatuntuk desimal. Mencampurnya menghasilkan float./selalu mengembalikan float.//membagi lalu membulatkan ke bawah,%memberikan sisanya.- Float tidak tepat: pakai
round()untuk hasil dan hindari==pada float. abs,min,max,roundsudah bawaan;math.ceil,math.floor, danmath.sqrtbutuhimport math.+=,-=,*=memperbarui variabel di tempat.- Konversi dengan
int(),float(), danstr(). Teks dari luar selalu berupa string sampai kamu mengonversinya.