For AI agents: use /llms.txt for the Nakafa content index.
Python menjaga inti bahasanya tetap terarah dan mengatur kode yang dapat digunakan ulang di dalam modul. Sebuah modul dapat memiliki fungsi, konstanta, kelas, dan nama lain tanpa menempatkan semuanya di namespace global.
import memuat modul ketika diperlukan dan mengikat sebuah nama untuk mengakses anggota publiknya. Standard library sudah menyediakan operasi matematika yang teruji, sehingga kode aplikasi sebaiknya menggunakannya daripada membuat ulang rumus secara serampangan.
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.
Python menawarkan beberapa cara untuk mengimpor modul, masing-masing dengan karakteristik dan penggunaan yang berbeda.
Cara paling dasar untuk mengimpor modul adalah menggunakan perintah import math. Dengan cara ini, semua nama fungsi dan konstanta tetap terikat pada namespace math.
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 definedAlias mengikat modul ke nama lokal lain. Pakai hanya ketika mengikuti konvensi yang sudah mapan atau menyelesaikan konflik nama nyata; math sendiri sudah singkat dan eksplisit.
import math as m
# Menggunakan alias 'm' sebagai pengganti 'math'
print(m.sqrt(9)) # Output: 3.0
print(m.pi) # Output: 3.141592653589793
# Nama asli 'math' tidak lagi tersedia
# math.sqrt(9) # NameError: name 'math' is not definedBentuk ini mengimpor 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 * dapat menimpa nama yang sudah ada tanpa terlihat, menyulitkan pelacakan pemilik setiap nama, dan membuat perubahan modul di masa depan mengubah namespace pengimpor. Import eksplisit menjaga dependensi tersebut tetap dapat ditinjau.
Cara yang lebih selektif adalah mengimpor hanya fungsi tertentu yang dibutuhkan. Ini memberikan akses langsung tanpa prefix sambil tetap menjaga kejelasan kode.
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 definedKamu juga bisa memberikan alias pada fungsi tertentu saat mengimpornya. Ini berguna untuk membuat nama fungsi lebih ringkas atau menghindari konflik nama.
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 definedPython menyediakan built-in numerik seperti abs() dan round() tanpa import. Keduanya bekerja lintas tipe melalui protokol numerik Python: sebuah tipe dapat mendefinisikan operasi yang didukungnya, bukan Python memilih dari beberapa deklarasi fungsi yang di-overload secara statis.
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 .
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 (bukan 5!)
# 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.
Setiap fungsi math memiliki domain. Sebagai contoh, sqrt(x) memerlukan masukan riil nonnegatif dan logaritma memerlukan masukan riil positif.
import math
# Fungsi akar kuadrat
print(f"Akar kuadrat 16: {math.sqrt(16)}") # Output: 4.0
# Fungsi eksponensial (e^x)
print(f"e pangkat 2: {math.exp(2)}") # Output: 7.38905609893065
# Fungsi logaritma natural
print(f"ln(10): {math.log(10)}") # Output: 2.302585092994046
# Fungsi logaritma basis 10
print(f"log10(100): {math.log10(100)}") # Output: 2.0
# Fungsi logaritma dengan basis tertentu
print(f"log2(8): {math.log(8, 2)}") # Output: 3.0import math
# Fungsi trigonometri (input dalam radian)
angle_rad = math.pi / 4 # 45 derajat dalam radian
print(f"sin(π/4): {math.sin(angle_rad)}") # Output: 0.7071067811865475
print(f"cos(π/4): {math.cos(angle_rad)}") # Output: 0.7071067811865476
print(f"tan(π/4): {math.tan(angle_rad)}") # Output: 0.9999999999999999
# Konversi derajat ke radian
angle_deg = 45
angle_rad = math.radians(angle_deg)
print(f"45 derajat = {angle_rad} radian") # Output: 0.7853981633974483import math
number = 4.7
# Ceiling: bilangan bulat terkecil yang >= x
print(f"ceil(4.7): {math.ceil(number)}") # Output: 5
# Floor: bilangan bulat terbesar yang <= x
print(f"floor(4.7): {math.floor(number)}") # Output: 4
# Faktorial
print(f"5!: {math.factorial(5)}") # Output: 120Modul ini juga menyediakan konstanta, termasuk konstanta matematika berhingga dan nilai floating-point khusus.
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}")Pilih gaya import yang membuat pemilik operasi terlihat jelas di tempat pemanggilan dan hanya memperkenalkan nama yang dibutuhkan modul.
import math ketika beberapa anggota dipakai dan asalnya perlu tetap terlihat.import math as m dengan sengaja hanya ketika alias tersebut merupakan konvensi lokal yang terdokumentasi.from math import sqrt, pi ketika sekumpulan kecil nama yang tidak ambigu memperjelas kode lokal.from math import * karena menyamarkan kepemilikan dan dapat membuat konflik nama.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 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 yang jelas membuat tiga keputusan terlihat: namespace pemilik operasi, domain masukan yang diterimanya, dan cara masukan luar biasa ditangani. Keputusan itu lebih penting daripada menyingkat nama fungsi beberapa karakter.