الفصل 05

العمليات الحسابية — القسمة، البواقي، وفخ الأعداد العشرية

المعاملات الحسابية السبعة، أولوية التنفيذ، استخدامات القسمة الصحيحة وباقي القسمة، ولماذا تظهر الكسور أحياناً بدقة غير متوقعة.

30 دقيقةPython 3.12
  1. 1المشكلة
  2. 2الفهم
  3. 3أمثلة محلولة
  4. 4التوقع
  5. 5التطبيق
  6. 6التحدي

المشكلة التي نقوم بحلها

لديك 17 كتاباً وصندوق يتسع لـ 5 كتب فقط. كم صندوقاً كاملاً ستحتاج، وكم كتاباً سيتبقى في الخارج؟

الإجابة ليست 17 / 5، لأن ذلك يعطي 3.4، ولا يوجد ما يسمى 3.4 صندوق. أنت بحاجة إلى إجابتين منفصلتين: كم عدد الصناديق الكاملة و كم تبقى من الكتب. في بايثون يوجد معامل خاص لكل منهما: معامل القسمة الصحيحة // ومعامل باقي القسمة % (Modulo).

وهناك أمر آخر يفاجئ المبتدئين دائماً: في لغات البرمجة بما فيها بايثون، ناتج 0.1 + 0.2 لا يساوي تماماً 0.3. سنفهم سبب ذلك وكيفية التعامل معه في هذه المهمة.

بنهاية هذه المهمة ستكون قادراً على

  • استخدام المعاملات الحسابية السبعة في بايثون
  • معرفة أولوية تنفيذ العمليات الحسابية ومتى تلزم الأقواس
  • فهم الحالات التي يكون فيها // و % هما الأداة المناسبة
  • إدراك سبب إنتاج معامل / دائماً لعدد عشري (float)
  • إجراء العمليات الحسابية مع مراعاة دقة الأعداد العشرية

المتطلبات المسبقة: المتغيرات والأنواع.


المعاملات الحسابية السبعة

python
print(10 + 3)
print(10 - 3)
print(10 * 3)
print(10 / 3)
print(10 // 3)
print(10 % 3)
print(10 ** 3)
text
13
7
30
3.3333333333333335
3
1
1000

أهم المعاملات الخاصة:

  • // — القسمة الصحيحة (Floor Division): تقسم الأعداد وتتجاهل الجزء العشري محتفظة بالعدد الصحيح فقط
  • % — باقي القسمة (Modulo): القيمة المتبقية بعد اكتمال القسمة الصحيحة
  • ** — الأس (Exponentiation): 10 ** 3 تعني 10 أس 3 (1000)
معامل / يُنتج دائماً عدداً عشرياً. حتى 10 / 5 تُرجع 2.0 وليس 2. إذا أردت عدداً صحيحاً، استخدم معامل القسمة الصحيحة //.

حل مسألة الصناديق والكتب

python
books = 17
per_box = 5

full_boxes = books // per_box
left_over = books % per_box

print("Full boxes:", full_boxes)
print("Left over :", left_over)
text
Full boxes: 3
Left over : 2

3 صناديق كاملة ويتبقى كتابان. المعاملان // و % يعملان دائماً معاً لإعطاء الصورة الكاملة لأي عملية تقسيم.

مثال تطبيقي متكامل

packing.py:

python
# Work out packing and shipping for one order
total_items = 47
items_per_box = 6
box_cost = 35.5

full_boxes = total_items // items_per_box
loose_items = total_items % items_per_box

# A partly filled box still costs a full box
boxes_needed = full_boxes
if loose_items > 0:
    boxes_needed = full_boxes + 1

shipping = boxes_needed * box_cost

print("Items        :", total_items)
print("Full boxes   :", full_boxes)
print("Loose items  :", loose_items)
print("Boxes needed :", boxes_needed)
print("Shipping     :", round(shipping, 2))
text
Items        : 47
Full boxes   : 7
Loose items  : 5
Boxes needed : 8
Shipping     : 284.0

الأخطاء الشائعة وحلولها

خطأ ZeroDivisionError: division by zero محاولة القسمة على الصفر. وهي غير معرفة رياضياً، لذا يوقف بايثون تنفيذ البرنامج فوراً.

ظهور 2.0 بدلاً من 2 في ناتج القسمة استخدم معامل القسمة الصحيحة // بدلاً من /.

وجود أرقام عشرية طويلة وغير دقيقة هذا ليس خطأ برمجياً بل طبيعة تمثيل الكسور العشرية في ذاكرة الحاسوب الثنائية. استخدم دالة round() لتقريب الناتج عند الطباعة.