| العامل المنطقي | آلية التقييم والتأثير في الشيفرة | مثال الشيفرة والنتيجة المتوقعة |
|---|---|---|
| العامل and | يشترط تحقق وصحة جميع الأطراف معاً ليعيد True وإذا شابه طرف واحد خاطئ يعيد False فوراً | كود True and False يعيد False |
| العامل or | يكتفي بالتحقق من صحة طرف واحد على الأقل ليعيد True ولا يعيد False إلا في حال فشل جميع الأطراف | كود True or False يعيد True |
| العامل not | عامل أحادي يقوم بعكس الحالة المنطقية الحالية للقيمة أو الشرط الموالي له مباشرة | كود not True يعيد False |
| أولوية النفي not | المعالج ينفذ عمليات العكس والنفي كأعلى سلطة منطقية قبل الالتفات للروابط الأخرى | ترتيب الأولوية الأول |
| أولوية الربط and | المعالج ينفذ عمليات الجمع الشرطي بعد النفي وقبل عمليات التخيير | ترتيب الأولوية الثاني |
| أولوية التخيير or | المعالج ينفذ عمليات الفصل والخيارات في نهاية المطاف المنطقي للسطر البرمي | ترتيب الأولوية الثالث |
1. مفهوم العوامل المنطقية في Python العوامل المنطقية (Logical Operators) هي أدوات برمجية تُستخدم للربط بين أكثر من شرط أو قيمة منطقية لبناء جمل شرطية مركبة ومعقدة. تُمكِّن هذه العوامل برامج بايثون من اتخاذ قرارات متقدمة بناءً على معايير متعددة في نفس الوقت، وتُرجع دائماً قيمة منطقية نهائية واحدة (True أو False).
تنقسم العوامل المنطقية في بايثون إلى ثلاثة عوامل أساسية: and, or, و not، وتُكتب بالكامل بحروف صغيرة (Lowercase).
يُشترط هذا العامل صحة جميع الشروط المرتبطة به ليعود بالقيمة True. إذا كان هناك شرط واحد فقط خاطئ (False) ضمن السلسلة، يسقط التقييم بالكامل ويعود بـ False. تتبع بايثون في هذا العامل ميزة "التقييم قصير الدائرة" (Short-circuit Evaluation)؛ فإذا وجد المحرك أن الطرف الأول False، فإنه لا يكلف نفسه عناء فحص الأطراف التالية لأنه يعلم مسبقاً أن النتيجة الحتمية هي False.
| 1 | age = 25 |
| 2 | has_license = True |
| 3 | |
| 4 | # يجب أن يكون العمر أكبر من 18 وامتلاك رخصة القيادة صحيحاً معاً |
| 5 | can_drive = (age > 18) and has_license |
| 6 | print(can_drive) # المخرج: True |
يكتفي هذا العامل بـ تحقق شرط واحد صحيح على الأقل من بين كافة الشروط المرتبطة به ليعود بالقيمة True. ولا يعود بالقيمة False إلا في حالة واحدة فقط، وهي أن تكون جميع الشروط بلا استثناء خاطئة. خاصية القصر الدائري تعمل هنا أيضاً؛ فإذا وجد المحرك أن الطرف الأول المحسوب هو True، يتوقف فوراً عن قراءة بقية الأسطر ويعود بـ True.
| 1 | is_weekend = True |
| 2 | is_holiday = False |
| 3 | |
| 4 | # يكفي أن يكون اليوم نهاية أسبوع أو عطلة رسمية لتفعيل الشرط |
| 5 | is_free = is_weekend or is_holiday |
| 6 | print(is_free) # المخرج: True |
هو عامل أحادي (Unary Operator)؛ لأنه لا يربط بين قيمتين، بل يدخل على قيمة أو شرط واحد يليه مباشرة ليقوم بـ عكس حالته المنطقية. إذا كانت القيمة الأصلية True يحولها إلى False والعكس صحيح.
| 1 | is_locked = False |
| 2 | print(not is_locked) # المخرج: True |
عند دمج عوامل منطقية متعددة ومختلفة في سطر برمي واحد دون استخدام أقواس، لا تقوم بايثون بقراءتها عشوائياً من اليسار إلى اليمين، بل تخضع لنظام أسبقية تنفيذ صارم يترتب على جهله حدوث أخطاء منطقية (Logical Errors) كارثية في نتائج البرنامج. تسير الأولويات المنطقية من الأعلى قوة إلى الأقل وفق الترتيب التالي:
| 1 | # مثال لتوضيح آلية الترتيب الافتراضي |
| 2 | result = False and True or not False |
| 3 | |
| 4 | # خطوات المعالجة البرمجية خلف الكواليس: |
| 5 | # 1. تنفيذ not أولاً: not False تحول إلى True. أصبح السطر: (False and True or True) |
| 6 | # 2. تنفيذ and ثانياً: False and True تنتج False. أصبح السطر: (False or True) |
| 7 | # 3. تنفيذ or أخيراً: False or True تنتج القيمة النهائية True. |
| 8 | print(result) # المخرج: True |
| 9 | |
| 10 | # تغيير السلوك البرمجي باستخدام الأقواس لتعديل الأولويات |
| 11 | controlled_result = False and (True or not False) |
| 12 | # هنا يتم فحص ما بداخل الأقواس أولاً بالكامل، ثم تُضرب النتيجة في عامل and الخارجي |
| 13 | print(controlled_result) # المخرج: False |
| 1 | age = 20 |
| 2 | has_id = True |
| 3 | is_member = False |
| 4 | |
| 5 | # and: كل الشروط يجب أن تتحقق |
| 6 | can_enter = age >= 18 and has_id |
| 7 | print(can_enter) # True |
| 8 | |
| 9 | # or: يكفي شرط واحد |
| 10 | can_discount = age < 18 or is_member |
| 11 | print(can_discount) # False |
| 12 | |
| 13 | # not: عكس الشرط |
| 14 | is_closed = not True |
| 15 | print(is_closed) # False |
مثال 1: مثال عملي - التحقق من الأهلية
| 1 | age = 22 |
| 2 | score = 85 |
| 3 | has_experience = True |
| 4 | |
| 5 | # مؤهل للوظيفة إذا كان عمره 20+ والمعدل 80+ أو لديه خبرة |
| 6 | is_qualified = (age >= 20 and score >= 80) or has_experience |
| 7 | print("مؤهل:", is_qualified) # True |
| 8 | |
| 9 | # غير ممنوع |
| 10 | is_not_banned = not False |
| 11 | print("غير ممنوع:", is_not_banned) # True |