Pustaka standar menyediakan tiga modul yang melingkupi pekerjaan numerik sehari-hari. Modul math berisi konstanta dan fungsi matematika umum, modul random menghasilkan angka acak untuk simulasi, dan modul statistics menghitung ringkasan suatu kumpulan data. Topik ini membahas fungsi inti ketiganya, disertai simulasi pelemparan dadu yang memperlihatkan kerja sama random dan statistics pada satu kasus utuh.
Konstanta dan fungsi numerik pada modul math#
Modul math mengumpulkan fungsi matematika yang bekerja pada bilangan riil, mulai dari akar kuadrat, pembulatan, hingga faktorial dan pembagi terbesar bersama. Konstanta seperti math.pi dan math.e tersedia dengan presisi penuh, sehingga tidak perlu diketik manual. Fungsi-fungsinya menerima dan mengembalikan tipe bilangan Python biasa, yaitu float atau int.
import math
print(math.pi, math.e)
print(math.sqrt(144), math.isqrt(144))
print(math.floor(7.8), math.ceil(7.2))
print(math.floor(-7.2), math.ceil(-7.2))
print(math.gcd(84, 36), math.factorial(6))3.141592653589793 2.718281828459045
12.0 12
7 8
-8 -7
12 720Fungsi sqrt() mengembalikan float karena akar kuadrat umumnya tidak bulat, sedangkan isqrt() mengembalikan int dan membulatkan ke bawah secara eksak, cocok untuk bilangan bulat besar. Pembulatan memperlihatkan arah yang berbeda pada bilangan negatif, yaitu floor(-7.2) menuju -8 dan ceil(-7.2) menuju -7, sesuai definisi lantai dan langit-langit. Selain fungsi di atas, modul ini menyediakan logaritma, pangkat, dan trigonometri yang dokumennya dapat ditelusuri saat dibutuhkan.
Pembangkit angka acak dengan random#
Modul random menghasilkan angka semu (pseudorandom) yang dihitung dari sebuah keadaan internal, dan fungsi random.seed() menetapkan keadaan awalnya. Dengan seed yang sama, seluruh urutan angka berikutnya sama persis, sehingga hasil simulasi dapat direproduksi. Tanpa seed, keadaan awal diambil dari sumber acak sistem, sehingga setiap eksekusi menghasilkan urutan yang berbeda.
import random
random.seed(42)
print(random.random())
print(random.randint(1, 6))
print(random.choice(["kertas", "batu", "gunting"]))
print(random.sample(range(1, 50), 5))0.6394267984578837
1
gunting
[18, 16, 15, 9, 48]Fungsi random() menghasilkan bilangan desimal pada rentang 0.0 sampai 1.0, sedangkan randint(a, b) menghasilkan bilangan bulat dengan kedua batas termasuk, sehingga randint(1, 6) meniru satu sisi dadu. Fungsi choice() memilih satu elemen dari urutan, sedangkan sample() mengambil beberapa elemen tanpa penggantian, cocok untuk undian yang tidak boleh mengulang pemenang. Fungsi shuffle() melengkapi kumpulan ini dengan mengacak urutan list di tempat.
Simulasi pelemparan dadu#
Simulasi sederhana memperlihatkan kerja random pada jumlah percobaan yang besar. Pelemparan satu dadu dimodelkan sebagai randint(1, 6), dilakukan seribu kali, lalu frekuensi setiap sisi dihitung dengan Counter dari modul collections. Secara teoretis setiap sisi diharapkan muncul sekitar 166 sampai 167 kali dari seribu lemparan.
import random
from collections import Counter
random.seed(7)
lemparan = [random.randint(1, 6) for _ in range(1000)]
hitungan = Counter(lemparan)
for sisi in range(1, 7):
print(sisi, hitungan[sisi])
print("rata-rata mata:", sum(lemparan) / len(lemparan))1 178
2 170
3 163
4 173
5 160
6 156
rata-rata mata: 3.435Frekuensi keluaran menyebar di sekitar nilai harapan, dan rata-rata mata mendekati 3.5 yang menjadi nilai tengah rentang 1 sampai 6. Sebaran ini tidak simetris sempurna karena jumlah percobaannya terbatas, dan variasi semacam itu wajar pada data acak. Dengan seed 7 di awal, angka-angka di atas dapat direproduksi kembali, sehingga simulasi semacam ini dapat digunakan sebagai bahan latihan yang jawabannya tetap.
Ringkasan data dengan statistics#
Modul statistics menghitung ringkasan suatu kumpulan angka tanpa pustaka pihak ketiga. Fungsi mean() menghitung rata-rata, median() mengambil nilai tengah setelah data diurutkan, dan mode() mengambil nilai yang paling sering muncul. Fungsi stdev() menghitung simpangan baku sampel, sedangkan pstdev() menghitung simpangan baku populasi, dan keduanya mengukur seberapa jauh data menyebar dari rata-rata.
import statistics
nilai = [70, 85, 90, 75, 80, 95, 85]
print(statistics.mean(nilai))
print(statistics.median(nilai))
print(statistics.mode(nilai))
print(statistics.stdev(nilai))82.85714285714286
85
85
8.591246929842246Rata-rata 82.86 dan median 85 berdekatan karena data tidak memuat pencilan yang ekstrem, sedangkan mode 85 adalah nilai yang muncul dua kali, dan nilai itu sekaligus menjadi median data. Simpangan baku sekitar 8.59 menyatakan penyebaran nilai di sekitar rata-ratanya dalam satuan yang sama dengan datanya. Apabila data yang dipegang merupakan seluruh populasi dan bukan sampel, pstdev() menjadi pilihan yang lebih tepat.
Kesalahan umum#
Kesalahan pertama adalah memanggil fungsi statistics pada data kosong. Setiap fungsi ringkasan menuntut setidaknya satu titik data, sehingga list kosong ditolak dengan error khusus milik modul ini.
import statistics
try:
statistics.mean([])
except statistics.StatisticsError as e:
print("StatisticsError:", e)StatisticsError: mean requires at least one data pointPerbaikannya adalah menguji keberadaan data dengan if data: sebelum menghitung, atau menampilkan pesan yang jelas bila data memang belum tersedia. Kesalahan kedua adalah mengandalkan urutan acak tanpa seed, sehingga hasil tidak dapat direproduksi kembali.
# tidak-dijalankan: urutan tanpa seed berbeda pada setiap eksekusi
import random
print(random.random())
print(random.random())Dua bilangan di atas berbeda pada setiap eksekusi karena keadaan awalnya diambil dari sumber acak sistem. Pola ini wajar untuk permainan, tetapi menjadi masalah saat simulasi perlu dipresentasikan ulang dengan hasil yang sama, sehingga seed eksplisit menjadi kebiasaan yang baik. Kesalahan ketiga adalah memanggil fungsi math di luar ranah definisinya, misalnya akar kuadrat dari bilangan negatif.
import math
try:
math.sqrt(-1)
except ValueError as e:
print("ValueError:", e)ValueError: math domain errorPesan math domain error menandakan argumen berada di luar ranah fungsi, dan validasi masukan sebelum pemanggilan mencegahnya. Apabila bilangan kompleks memang diinginkan, modul cmath menyediakan versi fungsi yang bekerja pada ranah kompleks.
Ringkasan#
- Modul
mathmenyediakan konstanta sepertipidan fungsi sepertisqrt(),isqrt(),floor(),ceil(),gcd(), danfactorial()untuk numerik umum. - Modul
randommenghasilkan angka semu,random.seed()menetapkan keadaan awal agar urutan dapat direproduksi, danrandint(),choice(),sample(), sertashuffle()mencakup kebutuhan pemilihan acak. - Modul
statisticsmenghitungmean(),median(),mode(), danstdev()untuk meringkas kumpulan data numerik. - Modul
randomtidak layak untuk keperluan keamanan, dan pilihan yang benar adalah modulsecrets.
Referensi#
- math — Python Software Foundation — Dokumentasi lengkap konstanta dan fungsi matematika pada modul math.
- random — Python Software Foundation — Dokumentasi modul random beserta catatan ketidakcocokannya untuk keamanan.
- statistics — Python Software Foundation — Dokumentasi modul statistics beserta rumus tiap fungsi ringkasannya.