عوامل الحساب
اجمع واطرح واضرب واقسم وقسم بأرضية واحسب الباقي والأس ، جميع عوامل الحساب الثمانية.
- استخدام عوامل الحساب الثمانية جميعها: +, -, *, /, //, %, **
- فهم القسمة الصحيحة (الأرضية) مقابل القسمة الحقيقية
- تطبيق أولوية العمليات (PEMDAS)
- استخدام الأقواس لتجاوز الأولوية
عواملَ تستعيرها الآلة من الرياضيات
كتبت دوالّ مساعدة في دروس سابقة: خزّن قيمةً، اطبعها، بدّل نوعها. لا يفيد شيءٌ من ذلك حتى يستطيع برنامجٌ أن يفعل شيئًا بالأعداد. لذا توقف قليلًا وتأمل: وُجد الحاسوب لتقييم التعبيرات، وكل تعبيرٍ يُبنى من عوامل تصل القيم. أنت تعرف حسابيةَ الورق ، لكن الآلة تقصّ اثنين منها إلى نصفين.
العوامل ومعانيها
توفّر بايثون ثمانية. الأربعة الأولى هي بالضبط ما تتوقعه:
7 + 2 # 9 — الجمع
7 - 2 # 5 — الطرح
7 * 2 # 14 — الضرب
7 / 2 # 3.5 — القسمة الحقيقية (ترجع float دائمًا)ثم ثلاثة تجيب عن أسئلة لم تطرحها إلا في الواجبات:
7 // 2 # 3 — قسمة الأرضية (تقريب نحو −∞)
7 % 2 # 1 — المقياس (الباقي)
7 ** 2 # 49 — الأُس (7²)** هو كتابة بايثون للقوة: . أما الوافدان الجديدان فهما // و%، وليسا تباينين ، بل نصفا سؤالٍ واحدٍ مشروع.
نصفان لقسمةٍ واحدة
اطرح سؤالًا حقيقيًّا: كم مجموعةً كاملةً من أربعة تَسع العددَ 15، وما الذي يتبقى؟
للجواب جزآن ، خارج القسمة والباقي . يجيب // في بايثون عن الجزء الأول ويجيب % عن الثاني:
15 // 4 # 3 — كم مجموعة من 4
15 % 4 # 3 — كم يتبقى
4 * 3 + 3 # 15 ✓ تتحقق الهويةتلك الهوية ليست زخرفة ، إنها تعريف العاملَين، ولا يمكن أن تفشل ما دامت الآلة نفسها تحسب الجزأين.
ثمة التواءة. ما خارج القسمة الذي تخبرك به بايثون لمسألة ؟ اكتبها سؤالَ تجميع:
الخياران هما أو . تأخذ بايثون الأرضية، مثل الدالة الرياضية :
-7 // 2 # -4 — أرضية (-3.5) = -4 لا -3
-7 % 2 # 1 — ملتزمة بالأرضية: -7 = 2·(-4) + 1يظلّ العاملان صادقَين أحدهما للآخر: الهوية تقوم بلا استثناء، وهذا أثمن من “الجواب البديهي”.
ترتيب العمليات، محسومٌ
التعبير الذي فيه عوامل متعددة يحتاج تسلسلًا ثابتًا، وإلا لحسب كل قارئ قيمةً مختلفةً لـ . تعتمد بايثون الترتيب الذي تعلمته باسم PEMDAS:
**أولًا (الأُس)- ثم
*,/,//,%(من اليسار إلى اليمين) - ثم
+,-(من اليسار إلى اليمين)
2 + 3 * 4 # 14، لا 20
(2 + 3) * 4 # 20 — الأقواس تتجاوز
2 ** 3 ** 2 # 512، لا 64ذاك الأخير مفاجأة حقيقية. ** ترابطيٌّ يميني، فيُقرأ 2 ** 3 ** 2 هكذا ، مطابقًا للتدوين المكدّس حيث تصعد القوى في اتجاهٍ واحد. وعند الشك فصّل الأقواس ، قارئٌ لا يرى الأقواس لن يخمّن قصدك.
مثالٌ محلول: باقي خطةِ القراءة
يديرُ الزوجُ حاصلُ القسمةِ/الباقي خطةَ قراءةٍ:
pages = 301
per_day = 30
days = pages // per_day # 10 — أيامُ قراءةٍ كاملة
leftover = pages % per_day # 1 — باقي اليوم الحادي عشر
print(f"{days} full days, {leftover} leftover")
days * per_day + leftover # 301 — تتحقق الهويةتصيرُ هويةُ القسمةِ دفترَ حسابٍ: days وleftover عموداهُ، والهويةُ إيصالٌ يثبتُ أنَّ شيئًا لم يضِع.
أخطاء شائعة
/مقابل//.7 / 2يساوي3.5(float)؛7 // 2يساوي3(int). لا تلجأ إلى//إلا حين يكون الخارج الصحيح هو ما تطلبه المسألة.- قسمة الأرضية مع السوالب.
-7 // 2يساوي-4لا-3. الأرضية تسير نحو لا نحو الصفر. %يعمل مع الكسور أيضًا.7.5 % 2يساوي1.5، الهوية أعلاه تصلح للأعداد الحقيقية كما للأعداد الصحيحة.- يرتبط
**أقوى من*.2 * 3 ** 2يساوي 18 لا 36 ، تُحسب القوةُ أولًا. ضعِ الأقواسَ متى أردت(2 * 3) ** 2= 36.
🧩 تحديات
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
دون تشغيله، احسب 15 // 4 و15 % 4 بيدك ثم تحقق أن تعيد إنتاج .
💡 الجواب: 15 // 4 يساوي 3 (أرضية $3.75$)، و15 % 4 يساوي 3، لأن $15 = 4\cdot 3 + 3$. ومعًا: 4 * 3 + 3 = 15 ، هوية القسمة، تحقّقنا منها.
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
كيف تستخرج رقم المئات من أي عدد؟ من n = 4567، أخرج 5 باستخدام الحساب فقط دون سلاسل.
💡 الجواب: (n // 100) % 10 ، قسّم أولًا على 100 لتزيح الرقم يمينًا (4567 ← 45)، ثم خذ المقياس 10 لتُبقي آخر رقم فقط (45 ← 5).
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
لماذا تستخدم بايثون ** للأس بدلًا من ^؟ وماذا يفعل ^ فعلًا في بايثون؟
💡 الجواب: `^` هو عامل XOR على البتات في بايثون، لا الأُس. تستخدم بايثون `**` تجنبًا للاصطدام مع اصطلاح لغاتٍ يكون فيها `^` بمعنى XOR.
🤔 أسئلة سقراطية
- لماذا تقرّب قسمة الأرضية نحو سالب اللانهاية لا نحو الصفر؟ وما الفائدة العملية التي تسقط من هذا الاختيار (تلميح: فكّر في
divmod()وهو يرجِع زوجًا متسقًا)؟ 2 ** 3 ** 2يساوي512لا64. لماذا يكون**ترابطيًّا يمينيًّا بينما+و*ترابطيّان يساريًّا؟- أين تكسب الحسابات المقياسية (modulo) قوتها في الحياة؟ فكّر في الساعات وأيام التقويم وفهارس المصفوفات.
✅ فحص سريع
١. ما ناتج -7 // 2؟
٢. ما ناتج 2 ** 3 ** 2؟
٣. ما ناتج 7 % 3؟