Table of Contents
آشنایی عملی با کتابخانهٔ `math`
در این بخش با مهمترین قابلیتهای کتابخانهٔ استاندارد math در پایتون آشنا میشویم. این کتابخانه برای کار با محاسبات ریاضی «واقعی» (روی اعداد اعشاری float) طراحی شده است.
برای استفاده از آن باید در ابتدای فایل بنویسید:
import mathیا میتوانید فقط تابعهای خاص را وارد کنید:
from math import sqrt, pi
(تفاوت شیوههای import در فصل «وارد کردن ماژولها» توضیح شده است.)
ثابتهای مهم در `math`
کتابخانهٔ math چند مقدار ثابت پرکاربرد را در اختیار شما میگذارد:
math.pi— عدد πmath.e— عدد $e$ (پایهٔ لگاریتم طبیعی)
مثال:
import math
print(math.pi) # 3.1415926535...
print(math.e) # 2.7182818284...از این ثابتها معمولاً در فرمولهای هندسی و محاسبات علمی استفاده میشود، مثلاً مساحت دایره:
$$
\text{area} = \pi r^2
$$
import math
r = 5
area = math.pi * (r ** 2)
print(area)ریشهٔ دوم و توانها
`math.sqrt(x)` — ریشهٔ دوم
تابع sqrt ریشهٔ دوم عدد غیرمنفی را برمیگرداند:
import math
print(math.sqrt(9)) # 3.0
print(math.sqrt(2)) # 1.4142135...اگر عدد منفی بدهید، خطا میگیرید:
math.sqrt(-1) # ValueError`math.pow(x, y)` در برابر عملگر `**`
هر دو برای توان استفاده میشوند:
x ** y— عملگر خود پایتونmath.pow(x, y)— نسخهٔ کتابخانهٔmath(خروجی همیشهfloatاست)
import math
print(2 ** 3) # 8
print(math.pow(2, 3)) # 8.0 (float)
در برنامههای معمولی، استفاده از ** کافی است؛ math.pow بیشتر در کدی استفاده میشود که از قبل بر پایهٔ math نوشته شده است.
گرد کردن و کار با کف و سقف
پایتون یک تابع round داخلی دارد، اما math توابع خاصتری ارائه میدهد:
`math.floor(x)` — کف (بزرگترین عدد صحیح کوچکتر یا مساوی)
import math
print(math.floor(3.9)) # 3
print(math.floor(-1.2)) # -2`math.ceil(x)` — سقف (کوچکترین عدد صحیح بزرگتر یا مساوی)
import math
print(math.ceil(3.1)) # 4
print(math.ceil(-1.2)) # -1
تفاوت در اعداد منفی مهم است؛ floor همیشه به سمت «پایین» روی خط اعداد میرود و ceil به سمت «بالا».
قدر مطلق و علامت
تابع داخلی abs در خود پایتون وجود دارد، اما math هم تابع کمکی دارد:
abs(x)— قدر مطلق (تابع داخلی پایتون)math.fabs(x)— نسخهٔmath(خروجی همیشهfloat)
import math
print(abs(-5)) # 5
print(math.fabs(-5)) # 5.0
در بیشتر مواقع abs کافی است.
توابع مثلثاتی
اگر با مثلثات آشنا هستید، math توابع استاندارد زیر را فراهم میکند:
math.sin(x)— سینوسmath.cos(x)— کسینوسmath.tan(x)— تانژانت
نکتهٔ مهم: ورودی این توابع بر حسب رادیان است، نه درجه.
تبدیل درجه و رادیان
math.radians(deg)— تبدیل درجه به رادیانmath.degrees(rad)— تبدیل رادیان به درجه
مثال:
import math
angle_deg = 30
angle_rad = math.radians(angle_deg)
print(math.sin(angle_rad)) # تقریباً 0.5
# برعکس
rad = math.pi / 2
print(math.degrees(rad)) # 90.0لگاریتمها
کتابخانهٔ math انواع مختلف لگاریتم را پشتیبانی میکند:
`math.log(x)` — لگاریتم طبیعی
لگاریتم بر پایهٔ $e$:
import math
print(math.log(math.e)) # تقریباً 1.0`math.log10(x)` — لگاریتم بر پایهٔ ۱۰
import math
print(math.log10(100)) # 2.0`math.log(x, base)` — لگاریتم با پایهٔ دلخواه
import math
print(math.log(8, 2)) # 3.0 (چون 2 به توان 3 میشود 8)ورودی لگاریتم باید مثبت باشد، وگرنه خطا رخ میدهد.
توابع نمایی
`math.exp(x)`
مقدار $e^x$ را حساب میکند:
import math
print(math.exp(1)) # تقریباً 2.718...
print(math.exp(2)) # تقریباً 7.389...
گاهی میتوان از ترکیب exp و log برای محاسبات علمی استفاده کرد.
توابع min/max ویژه: `math.fsum` و `math.prod`
پایتون به طور داخلی sum و از نسخههای جدیدتر math.prod را دارد، اما math یک نسخهٔ دقیقتر از جمع را ارائه میدهد:
`math.fsum(iterable)` — جمع دقیقتر اعداد اعشاری
برای لیستهای بزرگ float، math.fsum نسبت به sum خطای اعشاری کمتری دارد:
import math
numbers = [0.1] * 1000000
print(sum(numbers)) # نتیجه ممکن است کمی خطا داشته باشد
print(math.fsum(numbers)) # نتیجه دقیقتر است`math.prod(iterable)` — حاصلضرب تمام اعضا
import math
nums = [1, 2, 3, 4]
print(math.prod(nums)) # 24تابعهای کمکی مفید
چند تابع عمومی دیگر در math:
`math.factorial(n)` — فاکتوریل
برای عدد صحیح غیرمنفی $n$:
$$
n! = 1 \times 2 \times 3 \times \dots \times n
$$
import math
print(math.factorial(5)) # 120برای اعداد منفی یا اعشاری خطا میدهد.
`math.isfinite(x)`، `math.isinf(x)`، `math.isnan(x)`
این توابع برای بررسی وضعیت عدد به کار میروند (بیشتر در محاسبات خاص با float):
math.isfinite(x)— بررسی «متناهی بودن»math.isinf(x)— بررسی بینهایت بودنmath.isnan(x)— بررسیNaNبودن (Not a Number)
import math
x = float('inf')
y = float('nan')
print(math.isinf(x)) # True
print(math.isnan(y)) # Trueمثالهای کوچک کاربردی با `math`
مثال ۱: محاسبهٔ فاصلهٔ دو نقطه
دو نقطه در صفحه داریم: $(x_1, y_1)$ و $(x_2, y_2)$. فاصلهٔ بین آنها:
$$
d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}
$$
import math
x1, y1 = 0, 0
x2, y2 = 3, 4
dx = x2 - x1
dy = y2 - y1
distance = math.sqrt(dx*dx + dy*dy)
print(distance) # 5.0مثال ۲: تبدیل درجه به رادیان و محاسبهٔ سینوس
import math
deg = float(input("زاویه (درجه) را وارد کنید: "))
rad = math.radians(deg)
print("سینوس زاویه:", math.sin(rad))نکات پایانی کار با `math`
mathبا اعداد حقیقی (float) کار میکند، نه با اعداد مختلط؛ برای اعداد مختلط باید از ماژولcmathاستفاده کرد.- بسیاری از کارهای ساده را بدون
mathهم میتوان انجام داد (مثلاً توان با**، قدر مطلق باabs)، اما برای توابع مثلثاتی، لگاریتم، فاکتوریل و … تقریباً همیشه ازmathاستفاده میشود. - اگر هدف شما «علم داده» یا «محاسبات عددی سنگین» است، در فصلهای بعدی با کتابخانههایی مثل NumPy آشنا میشوید که روی
mathسوار میشوند و امکانات بسیار بیشتری میدهند.