Konsep Modul dalam Python
Python menyimpan banyak kode yang dapat digunakan ulang di dalam modul. Sebuah modul dapat berisi fungsi, konstanta, class, dan nama lain tanpa menempatkan semuanya di namespace global.
import memuat modul ketika diperlukan dan mengikat sebuah nama untuk mengakses anggota publik modul tersebut. Standard library menyediakan banyak fungsi matematika yang siap dipakai dan sudah diuji. Sebelum menulis rumus sendiri, periksa apakah standard library sudah menyediakan fungsi yang dibutuhkan.
Modul math untuk Fungsi Matematika
Modul math menyediakan fungsi dan konstanta bernilai riil. Modul ini menerima bilangan riil yang kompatibel seperti int dan float, tetapi operasi seperti sqrt() tidak menerima nilai kompleks. Gunakan cmath ketika domain atau hasilnya dapat berupa bilangan kompleks.
Cara Import Modul math
Python menawarkan beberapa cara untuk mengimpor modul, dan pilihannya memengaruhi bentuk setiap pemanggilan setelahnya. Kamu bisa mengimpor seluruh modul, mengimpor nama tertentu saja, atau mengganti nama modul saat impor.
Import Dasar dengan Namespace
Statement import math menambahkan modul ke namespace dengan nama math. Setelah itu, fungsi dan konstanta dipanggil dengan nama seperti math.sqrt dan math.pi.
import math
# Menggunakan fungsi sqrt dengan prefix math
print(math.sqrt(9)) # Output: 3.0
# Mengakses konstanta pi
print(math.pi) # Output: 3.141592653589793
# Jika mencoba tanpa prefix, akan terjadi error
# sqrt(9) # NameError: name 'sqrt' is not definedImport dengan Alias
Alias mengikat modul ke nama lokal lain. Pakai alias jika mengikuti konvensi yang sudah mapan atau jika dua nama memang bertabrakan. Nama math sendiri sudah singkat dan jelas.
import math as m
# Menggunakan alias 'm' sebagai pengganti 'math'
print(m.sqrt(9)) # Output: 3.0
print(m.pi) # Output: 3.141592653589793
# Import ini hanya mengikat nama m, bukan math
# math.sqrt(9) # NameError: name 'math' is not definedImport Semua Fungsi
Bentuk ini memasukkan setiap nama publik dari math ke namespace saat ini. Cara tersebut mungkin nyaman dalam sesi interaktif sekali pakai, tetapi sebaiknya dihindari dalam kode aplikasi.
from math import *
# Fungsi dapat dipanggil langsung tanpa prefix
print(sqrt(9)) # Output: 3.0
print(pi) # Output: 3.141592653589793
# Nama 'math' tidak tersedia karena tidak diimpor
# math.sqrt(9) # NameError: name 'math' is not definedfrom math import * memasukkan semua nama publik dari math ke namespace saat ini. Jika salah satu nama itu sudah dipakai, nilai dari math menggantikannya tanpa pesan error. Kode juga tidak lagi menunjukkan modul asal setiap nama, dan perubahan pada math dapat menambahkan nama baru ke modul yang melakukan import. Import eksplisit mencantumkan setiap nama beserta modul asalnya.
Import Fungsi Tertentu
Import hanya fungsi yang dipakai program. Nama fungsi tetap dapat dipanggil tanpa prefix modul, sedangkan baris import tetap mencatat asalnya.
from math import sqrt
# Fungsi sqrt dapat dipanggil langsung
print(sqrt(9)) # Output: 3.0
# Konstanta pi tidak tersedia karena tidak diimpor
# print(pi) # NameError: name 'pi' is not defined
# Nama 'math' juga tidak tersedia
# math.sqrt(9) # NameError: name 'math' is not definedImport dengan Alias Fungsi
Fungsi yang di-import dapat diberi alias untuk menghindari konflik nama atau mengikuti konvensi lokal yang sudah ditetapkan.
from math import factorial as fac
# Menggunakan alias 'fac' untuk fungsi factorial
print(fac(5)) # Output: 120
# Nama asli 'factorial' tidak tersedia
# factorial(5) # NameError: name 'factorial' is not defined
# Begitu juga dengan 'math'
# math.factorial(5) # NameError: name 'math' is not definedBuilt In dan Fungsi Modul
Python menyediakan built-in numerik seperti abs() dan round() tanpa import. Keduanya bekerja pada berbagai tipe melalui protokol numerik Python. Setiap tipe dapat menentukan operasi yang didukungnya.
Fungsi Nilai Absolut
Untuk bilangan riil, abs() mengembalikan besar nonnegatif. Untuk bilangan kompleks, fungsi ini mengembalikan jarak dari titik asal.
# Nilai absolut untuk bilangan integer negatif
print(abs(-5)) # Output: 5
# Nilai absolut untuk bilangan float negatif
print(abs(-1.4)) # Output: 1.4
# Nilai absolut untuk bilangan kompleks (modulus)
print(abs(4 + 3j)) # Output: 5.0Hasil untuk 4 + 3j adalah karena . Python menulis satuan imajiner sebagai j, sedangkan rumus matematika lazim memakai .
Fungsi Pembulatan
Untuk tipe numerik bawaan Python, round() membulatkan ke nilai terdekat dan memilih yang genap ketika tepat di tengah. Pemanggilan tanpa ndigits mengembalikan integer untuk float, sedangkan argumen kedua memilih posisi desimal.
# Pembulatan standar
print(round(-3.8)) # Output: -4
print(round(3.5)) # Output: 4
print(round(4.5)) # Output: 4
# Pembulatan dengan presisi tertentu
print(round(3.141592653589793, 3)) # Output: 3.142
print(round(1234.4321, -2)) # Output: 1200.0Karena itu, round(4.5) menghasilkan , sedangkan round(3.5) juga menghasilkan . Nilai float yang tampak desimal disimpan dalam biner, sehingga nilai yang terlihat tepat di tengah belum tentu demikian secara internal. Gunakan aritmetika desimal ketika domain memerlukan aturan pembulatan desimal.
Fungsi dan Konstanta dalam Modul math
Setiap fungsi math memiliki domain. Sebagai contoh, sqrt(x) menerima input riil nonnegatif, sedangkan logaritma menerima input riil positif. Nilai di luar domain itu menghasilkan ValueError, bukan sebuah angka.
Fungsi Akar dan Logaritma
Contoh berikut memanggil fungsi akar dan logaritma, lalu memperlihatkan cara Python melaporkan masukan di luar daerah asalnya.
import math
# Fungsi akar kuadrat
print(f"Akar kuadrat 16: {math.sqrt(16)}") # Output: Akar kuadrat 16: 4.0
# Fungsi eksponensial (e^x)
print(f"e pangkat 2: {math.exp(2)}") # Output: e pangkat 2: 7.38905609893065
# Fungsi logaritma natural
print(f"ln(10): {math.log(10)}") # Output: ln(10): 2.302585092994046
# Fungsi logaritma basis 10
print(f"log10(100): {math.log10(100)}") # Output: log10(100): 2.0
# Fungsi logaritma dengan basis tertentu
print(f"log2(8): {math.log(8, 2)}") # Output: log2(8): 3.0
try:
math.sqrt(-1)
except ValueError as error:
print(type(error).__name__)
# Output: ValueErrorFungsi Trigonometri
Fungsi trigonometri memakai satuan radian. Contoh berikut mengubah satu sudut lalu memanggil ketiga fungsi utamanya.
import math
# Fungsi trigonometri (input dalam radian)
angle_rad = math.pi / 4 # 45 derajat dalam radian
print(f"sin(π/4): {math.sin(angle_rad)}") # Output: sin(π/4): 0.7071067811865475
print(f"cos(π/4): {math.cos(angle_rad)}") # Output: cos(π/4): 0.7071067811865476
print(f"tan(π/4): {math.tan(angle_rad)}") # Output: tan(π/4): 0.9999999999999999
# Konversi derajat ke radian
angle_deg = 45
angle_rad = math.radians(angle_deg)
print(f"45 derajat = {angle_rad} radian") # Output: 45 derajat = 0.7853981633974483 radianFungsi Ceiling Floor dan Faktorial
Pembulatan ke atas, pembulatan ke bawah, dan faktorial menjawab pertanyaan yang berbeda. Contoh berikut menerapkan setiap fungsi lalu mencetak hasilnya.
import math
number = 4.7
# Ceiling: bilangan bulat terkecil yang >= x
print(f"ceil(4.7): {math.ceil(number)}") # Output: ceil(4.7): 5
# Floor: bilangan bulat terbesar yang <= x
print(f"floor(4.7): {math.floor(number)}") # Output: floor(4.7): 4
# Faktorial
print(f"5!: {math.factorial(5)}") # Output: 5!: 120Konstanta Matematika
Modul ini juga menyediakan konstanta matematika berhingga serta nilai khusus bertipe float.
import math
# Konstanta pi (π ≈ 3.141592...)
print(f"Nilai π: {math.pi}")
# Konstanta e (bilangan Euler ≈ 2.718281...)
print(f"Nilai e: {math.e}")
# Infinity (tak terhingga positif)
print(f"Infinity: {math.inf}")
# Not a Number (bukan bilangan)
print(f"NaN: {math.nan}")
# Contoh penggunaan konstanta
lingkaran_radius = 5
luas_lingkaran = math.pi * lingkaran_radius ** 2
print(f"Luas lingkaran dengan radius {lingkaran_radius}: {luas_lingkaran}")Memilih Cara Import Modul
Pilih cara mengimpor yang tetap menampilkan nama modul pada setiap pemanggilan ketika konteks itu dibutuhkan, dan impor hanya nama yang benar-benar dipakai program. Satu fungsi yang dipakai sekali lebih jelas ditulis from math import sqrt, sedangkan banyak pemanggilan lebih rapi dengan import math.
Panduan Import Modul
Pilih gaya import dari banyaknya nama yang kamu butuhkan dan seberapa jelas pemanggilannya. Daftar berikut mengurutkan pilihan dari yang paling eksplisit.
- Utamakan
import mathketika program memakai beberapa anggota. Pemanggilan sepertimath.sqrt()menempatkan nama modul di sebelah fungsi. - Gunakan
import math as mdengan sengaja hanya ketika alias tersebut merupakan konvensi lokal yang terdokumentasi. - Gunakan
from math import sqrt, piketika sekumpulan kecil nama yang tidak ambigu memperjelas kode lokal. - Hindari
from math import *karena setiap nama dipakai tanpa awalan modul dan dapat mengganti nama yang sudah digunakan program.
Menghitung Jarak dan Luas
Untuk titik (0, 0) dan (3, 4), jarak Euclidean adalah akar jumlah kuadrat selisih koordinat. Untuk sisi 3, 4, dan 5, rumus Heron memberi luas yang sama dengan rumus segitiga siku-siku.
import math
def hitung_jarak_euclidean(x1, y1, x2, y2):
"""Menghitung jarak Euclidean antara dua titik"""
return math.hypot(x2 - x1, y2 - y1)
def hitung_luas_segitiga(a, b, c):
"""Menghitung luas segitiga menggunakan rumus Heron"""
if not all(math.isfinite(side) for side in (a, b, c)):
raise ValueError("Panjang sisi harus berhingga")
if min(a, b, c) <= 0:
raise ValueError("Panjang sisi harus positif")
if a + b <= c or a + c <= b or b + c <= a:
raise ValueError("Panjang sisi harus membentuk segitiga")
# Menghitung semi-perimeter
s = (a + b + c) / 2
# Rumus Heron
luas = math.sqrt(s * (s - a) * (s - b) * (s - c))
return luas
# Contoh penggunaan
titik1 = (0, 0)
titik2 = (3, 4)
jarak = hitung_jarak_euclidean(*titik1, *titik2)
print(f"Jarak antara {titik1} dan {titik2}: {jarak}")
# Menghitung luas segitiga dengan sisi 3, 4, 5
luas = hitung_luas_segitiga(3, 4, 5)
print(f"Luas segitiga dengan sisi 3, 4, 5: {luas}")Kode numerik perlu menunjukkan tiga hal: namespace pemilik operasi, domain input, dan cara menangani input yang berada di luar domain atau memiliki nilai khusus seperti nan. Informasi ini lebih berguna daripada menyingkat nama fungsi beberapa karakter.