العوامل المنطقية
ادمج الشروط بـ and و or و not ، الروابط المنطقية في بايثون.
- استخدام and و or و not لدمج التعبيرات المنطقية
- فهم التقييم بقصر الدائرة (short-circuit)
- تطبيق قوانين دي مورغان في بايثون
- كتابة شروط معقدة بوضوح
بناء شروطٍ من شروط
تُسلّمك عوامل المقارنة قيمةَ صدقٍ واحدة: True أو False. تسأل بوابة النادي سؤالين معًا ، «هل تجاوزت سن الرشد، وهل تحمل تذكرة؟» ، وهذا الاقتران بحد ذاته شرط. تقدم بايثون، مثل المنطق الذي عرفت في الرياضيات، الروابط الثلاثة التي تدمج القضايا:
- تُكتب
and - تُكتب
or - يُكتب
not
الروابط الثلاثة
سلوكُها هو جدول الصدق الذي تعرفه. اكتبه في بايثون فيُقرأ مطابقًا:
True and True # True
True and False # False
False or True # True
not True # Falseحيث تُجديك حقًّا هو لصق المقارنات في بوابةٍ واحدة. مكانٌ ليلي، تنبيهُ طقسٍ، يوم عمل:
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("Welcome in")
temperature = 30
if temperature < 0 or temperature > 40:
print("Extreme weather!")
is_weekend = False
if not is_weekend:
print("Time to work")كلُّ واحدٍ منها سؤالٌ واحدٌ مؤلفٌ من أسئلةٍ أصغر ، مثلما ألفَ الفتراتَ في الدرس السابق.
التقييم بقصر الدائرة
يسرد جدول الصدق الكامل أربعة صفوف، لكن بايثون لا تحتاجها دائمًا. قيّم and حين تكون : الجواب False مهما كانت ، فلا تُحسب أبدًا. وينطبق الجدار نفسه على or: بمجرد أن تصبح مساويةً True، يكون الناتج محسومًا. تقرأ بايثون من اليسار إلى اليمين وتتوقف عند أول جوابٍ حاسم.
ليست هذه نعمةً أدائية؛ إنه جهازُ أمان:
x = 0
# لا تحدث قسمة أصلًا — الصفر زائف، فيُتخطى النصف الثاني
result = x != 0 and 10 / x > 2لو قيّمت بايثون الطرفين، لانكسر بقسمةٍ على صفر. كلمة and بوابةُ تفتيشٍ قبل الإقلاع: ترفض أن تطير بالشرط الثاني ما لم يُخلي السبيلَ الشرطُ الأول. لذلك تكتب بايثون and/or حيث تكتب لغات عائلة C &&/|| ، تحمل الكلمات نفس قصر الدائرة دون رموز مبهمة.
مقايضتا دي مورغان
أكثر المتطابقات المنطقية إعادةً للاستخدام تُمرّر النفي عبر رابط:
- ،
not (A and B)≡not A or not B - ،
not (A or B)≡not A and not B
في بايثون، نفيُ شرطٍ موصولٍ يصير شرطًا موصولًا من النفيين:
# هاتان متكافئتان:
not (age >= 18 and has_ticket)
age < 18 or not has_ticketالصيغة المعاد كتابتها تُقرأ بسلاسة: البوابة لا تفتح لقاصرٍ ولا لغيرِ حاملِ تذكرة. قوانين دي مورغان هي الأداة لتحويل not (…) الكثيف الذي تحتاج فكّكه إلى قراءةٍ واضحة.
جداول الصدق في لمحة
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
أمّا فيقلب قيمة الصدق الواحدة: not True ← False، وnot False ← True.
مثالٌ محلول: بابُ النادي، حكايةً مزدوجة
بابٌ واحدٌ وحكمٌ واحدٌ وصياغتانِ. ترفضُ قاعدةُ الدخولِ من ليس بالغًا أو لا يحملُ تذكرةً:
age = 20
has_ticket = True
denied = not (age >= 18 and has_ticket) # False
denied_again = age < 18 or not has_ticket # False — دي مورغان، مكافئيقولُ السطرُ الأولُ «ليس صحيحًا أن (بالغٌ ومعهُ تذكرةٌ)»؛ ويقولُ الثاني «قاصرٌ أو بلا تذكرةٍ» ، وجهَا قانونِ دي مورغان، ويجيبانِ معًا جوابًا واحدًا. ويُقرأ الشكلُ المنقوضُ كالجملةِ التي يصفها.
أخطاء شائعة
and/orيعيدان معاملًا لا قيمةً منطقية.0 and 5يساوي0؛0 or 5يساوي5. تعيد بايثون القيمة التي حسمت الأمر. الصفرُ الزائفُ هو الذي حسم، فعاد الصفر.notيشدّ أقوى من==. تُحلَّلnot a == bهكذاnot (a == b)لا(not a) == b. ضع أقواسًا عند الشك.- كلماتٌ لا رموزَ بتّية.
True and FalseيساويFalse؛ أمّاTrue & Falseفهي عملية بتّية على القيمتين بسلوكٍ مختلف. أبقِ&/|للعمل على مستوى البتات. and/orكسولانِ كسلًا يخفي الأخطاء. إذا كان الجانبُ الحاسمُ صادقًا أو كاذبًا فعلًا، لم يُنفَّذ الجانبُ الآخرُ قطّ ،1 or missing_function()لا يستدعي الدالةَ أبدًا. نصفٌ ميتٌ لم يرتطمْ قد يخفي اسمًا نسيته.
🧩 تحديات
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
دون تشغيله، تنبّأ بـ 0 and 5 و0 or 5 و3 and 5 و3 or 5. ما النمط الذي تراه؟
💡 الجواب: 0 and 5 ← 0، و0 or 5 ← 5، و3 and 5 ← 5، و3 or 5 ← 3. النمط: and يعيد أول معاملٍ زائف (أو الأخير إن كانت كلها صادقة)؛ وor يعيد أولَ صادق (أو الأخير إن كانت كلها زائفة).
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
أعد كتابة not (x > 5 and y < 10) بقانون دي مورغان. هل الصيغة المعاد كتابتها أسهل قراءة؟
💡 الجواب: not (x > 5 and y < 10) ≡ x <= 5 or y >= 10 ، قراءة مباشرة بلا نفيٍ مركبٍ تُفكّ عقده.
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
اكتب شرط السنة الكبيسة: تقبل القسمة على 4، ما عدا القُرون (ما يقبل القسمة على 100) ما لم تكن أيضًا تقبل القسمة على 400. استخدم and وor وnot.
💡 الجواب: (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) ، تقبل القسمة على 4 لا على 100، أو تقبل القسمة على 400.
🤔 أسئلة سقراطية
- يعطي
0 and 5ناتج0لاFalse. لماذا تعيد بايثون القيمةَ الحاسمة بدلًا من قيمةٍ منطقية؟ ومتى يصير ذلك نافعًا؟ - إذا كان
orيعيد أول معاملٍ صادق، فما"hello" or "world"؟ وما"" or "world"؟ - لماذا تفضل بايثون الكلمات
andوorوnotعلى الرموز&&و||و!؟ وماذا يشتري الوضوحُ الإنجليزيُّ للقارئ؟
✅ فحص سريع
١. ما ناتج True and False؟
٢. إلى ماذا يرجع 0 or 5؟
٣. أيٌّ من الآتي يكافئ not (a and b)؟