الرياضيات والإحصاء
الحساب العددي هو مهارة برمجة أساسية. توفر المكتبة القياسية لبايثون مجموعة كاملة من الأدوات — من دوال الرياضيات الأساسية إلى التحليل الإحصائي، من الحساب العشري الدقيق إلى عمليات الكسور. هذا الدرس يعلمك استخدام الوحدة المناسبة للسيناريو المناسب.
1. math — الدوال الرياضية
import math
# الثوابت الشائعة
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
# التقريب
print(math.ceil(3.14)) # 4 (تقريب لأعلى)
print(math.floor(3.14)) # 3 (تقريب لأسفل)
# الأسس واللوغاريتمات
print(math.pow(2, 10)) # 1024.0 (2 أس 10)
print(math.sqrt(16)) # 4.0 (جذر تربيعي)
print(math.log(100, 10)) # 2.0 (لوغاريتم للأساس 10)
# علم المثلثات
print(math.sin(math.pi / 2)) # 1.0
print(math.cos(0)) # 1.0
print(math.radians(180)) # 3.14159... (درجات إلى راديان)
مثال: حساب المسافة (الصعوبة ⭐)
import math
def distance(x1, y1, x2, y2):
"""احسب المسافة بين نقطتين"""
return math.sqrt((x2 - x1) 2 + (y2 - y1) 2)
def circle_area(radius):
"""احسب مساحة الدائرة"""
return math.pi * radius ** 2
print(f"Distance: {distance(0, 0, 3, 4):.2f}") # 5.00
print(f"Circle area: {circle_area(5):.2f}") # 78.54
2. statistics — التحليل الإحصائي
import statistics
data = [12, 15, 18, 20, 22, 25, 30, 35, 40]
# النزعة المركزية
print(statistics.mean(data)) # 24.11 (المتوسط)
print(statistics.median(data)) # 22 (الوسيط)
# print(statistics.mode(data)) # المنوال (يُخطئ إذا لم يكن فريداً)
# التشتت
print(statistics.stdev(data)) # 9.32 (الانحراف المعياري للعينة)
print(statistics.variance(data)) # 86.86 (تباين العينة)
مثال: تحليل الدرجات (الصعوبة ⭐⭐)
import statistics
scores = [85, 92, 78, 90, 88, 76, 95, 82, 89, 73]
print("=== Score Analysis ===")
print(f"Mean: {statistics.mean(scores):.1f}")
print(f"Median: {statistics.median(scores)}")
print(f"Max: {max(scores)}")
print(f"Min: {min(scores)}")
print(f"Std Dev: {statistics.stdev(scores):.2f}")
mean = statistics.mean(scores)
std = statistics.stdev(scores)
print("\n=== Grade Distribution ===")
for score in sorted(scores, reverse=True):
if score > mean + std:
level = "Excellent ⭐"
elif score > mean:
level = "Good 👍"
elif score > mean - std:
level = "Average"
else:
level = "Needs Work 💪"
print(f" {score:3d} — {level}")
3. decimal — الحساب العشري الدقيق
from decimal import Decimal, getcontext
# مشكلة دقة float
print(0.1 + 0.2) # 0.30000000000000004 ❌
# حساب عشري دقيق باستخدام Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3 ✅
# ضبط الدقة
getcontext().prec = 4 # دقة عالمية 4 أرقام
print(Decimal(1) / Decimal(3)) # 0.3333 (4 أرقام)
# الحسابات المالية يجب أن تستخدم Decimal
price = Decimal("19.99")
quantity = Decimal("3")
tax_rate = Decimal("0.08")
total = price * quantity
tax = total * tax_rate
print(f"Total: {total:.2f}") # 59.97
print(f"Tax: {tax:.2f}") # 4.80
print(f"Payable: {total + tax:.2f}") # 64.77
Decimal للحسابات المالية، ولا تستخدم float أبداً. مشكلة دقة 0.1 + 0.2 قاتلة في المالية. Decimal يضحي ببعض الأداء للحصول على حساب عشري دقيق.
4. fractions — حساب الكسور
from fractions import Fraction
# إنشاء كسور
f1 = Fraction(1, 3) # 1/3
f2 = Fraction(2, 6) # يُختزل تلقائياً إلى 1/3
print(f1) # 1/3
print(f2) # 1/3
print(f1 == f2) # True
# عمليات الكسور
a = Fraction(1, 2)
b = Fraction(1, 3)
print(a + b) # 5/6
print(a * b) # 1/6
print(a / b) # 3/2
# التحويل بين الكسور والأعداد العشرية
print(float(Fraction(1, 3))) # 0.3333333333
print(Fraction(0.25).limit_denominator()) # 1/4
حالات الاستخدام الشائعة
- math: الهندسة (مساحة/حجم)، علم المثلثات، العمليات اللوغاريتمية.
- statistics: تحليل درجات الامتحان، تقارير البيانات، بيانات التجارب العلمية.
- decimal: حساب أسعار التجارة الإلكترونية، البيانات المالية، حساب الضرائب.
- fractions: نسب الوصفات، النسب الهندسية، التطبيقات التعليمية.
❓ أسئلة شائعة
math والدوال المدمجة abs() و round() و sum()؟math يوفر دوالاً أكثر تخصصاً (علم المثلثات، اللوغاريتمات، المضروب). استخدم الدوال المدمجة عندما تكون كافية.
س:هل statistics.mean() أفضل من حساب المتوسط يدوياً؟ ج:mean() محسّن داخلياً (تمريرة واحدة لكل من المجموع والعدد)، أداء أفضل لمجموعات البيانات الكبيرة، ويتعامل مع الحالات الحدودية مثل القوائم الفارغة.
س:متى يجب استخدام Fraction مقابل Decimal؟ ج:استخدم Fraction عندما تحتاج حساباً نسبياً دقيقاً (مثل تمارين الكسور في البرامج التعليمية). استخدم Decimal للحسابات العشرية بدقة مضبوطة (مثل المالية). للحالات البسيطة، float جيد — 99% من البرمجة اليومية لن تحتاج أياً منهما.📖 ملخص
math:ceil()/floor()تقريب،sqrt()جذر تربيعي،pi/eثوابت، دوال مثلثيةstatistics:mean()متوسط،median()وسيط،stdev()انحراف معياريDecimal: حساب عشري دقيق، مناسب للمالية؛ أنشئ من سلاسل نصية (Decimal("0.1"))Fraction: حساب كسور دقيق، اختزال تلقائي
📝 تمارين
-
أساسي (الصعوبة ⭐): استخدم وحدة
mathلحساب مساحة ومحيط دائرة نصف قطرها 7. -
متوسط (الصعوبة ⭐⭐): بالنظر إلى
data = [23, 45, 67, 12, 34, 56, 78, 90, 11, 43]، استخدمstatisticsلحساب المتوسط والوسيط والانحراف المعياري. ثم استخدمmathلتحديد القيم التي تقع ضمن "المتوسط ± الانحراف المعياري." -
تحدي (الصعوبة ⭐⭐⭐): اكتب برنامج "الخروج من عربة التسوق." المنتجات لها أسماء وأسعار وحدة (
Decimal) وكميات. بعد إضافة العناصر، احسب المجموع والضريبة (8%) والخصم (اطرح 10 لكل 100)، ثم أخرج المبلغ النهائي. متطلب: جميع الحسابات النقدية يجب أن تستخدمDecimal.



