الرياضيات والإحصاء

الحساب العددي هو مهارة برمجة أساسية. توفر المكتبة القياسية لبايثون مجموعة كاملة من الأدوات — من دوال الرياضيات الأساسية إلى التحليل الإحصائي، من الحساب العشري الدقيق إلى عمليات الكسور. هذا الدرس يعلمك استخدام الوحدة المناسبة للسيناريو المناسب.


1. math — الدوال الرياضية

PYTHON
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... (درجات إلى راديان)

مثال: حساب المسافة (الصعوبة ⭐)

PYTHON
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 — التحليل الإحصائي

PYTHON
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 (تباين العينة)

مثال: تحليل الدرجات (الصعوبة ⭐⭐)

PYTHON
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 — الحساب العشري الدقيق

PYTHON
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 — حساب الكسور

PYTHON
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 والدوال المدمجة 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: حساب كسور دقيق، اختزال تلقائي

📝 تمارين

  1. أساسي (الصعوبة ⭐): استخدم وحدة math لحساب مساحة ومحيط دائرة نصف قطرها 7.

  2. متوسط (الصعوبة ⭐⭐): بالنظر إلى data = [23, 45, 67, 12, 34, 56, 78, 90, 11, 43]، استخدم statistics لحساب المتوسط والوسيط والانحراف المعياري. ثم استخدم math لتحديد القيم التي تقع ضمن "المتوسط ± الانحراف المعياري."

  3. تحدي (الصعوبة ⭐⭐⭐): اكتب برنامج "الخروج من عربة التسوق." المنتجات لها أسماء وأسعار وحدة (Decimal) وكميات. بعد إضافة العناصر، احسب المجموع والضريبة (8%) والخصم (اطرح 10 لكل 100)، ثم أخرج المبلغ النهائي. متطلب: جميع الحسابات النقدية يجب أن تستخدم Decimal.

100%