PyDA Course
📖 درس 7 مبتدئ ⏱ 12 دقيقة ⚡ +10 XP ColabKagglenbviewerBinderDeepnoteGitHub boolean · and · or · not · short-circuit · logic

العوامل المنطقية

ادمج الشروط بـ and و or و not ، الروابط المنطقية في بايثون.

🎯 ماذا ستتعلم:
  • استخدام and و or و not لدمج التعبيرات المنطقية
  • فهم التقييم بقصر الدائرة (short-circuit)
  • تطبيق قوانين دي مورغان في بايثون
  • كتابة شروط معقدة بوضوح

بناء شروطٍ من شروط

تُسلّمك عوامل المقارنة قيمةَ صدقٍ واحدة: True أو False. تسأل بوابة النادي سؤالين معًا ، «هل تجاوزت سن الرشد، وهل تحمل تذكرة؟» ، وهذا الاقتران بحد ذاته شرط. تقدم بايثون، مثل المنطق الذي عرفت في الرياضيات، الروابط الثلاثة التي تدمج القضايا:

  • ABA \land B تُكتب and
  • ABA \lor B تُكتب or
  • ¬A\lnot A يُكتب not

الروابط الثلاثة

سلوكُها هو جدول الصدق الذي تعرفه. اكتبه في بايثون فيُقرأ مطابقًا:

python
True and True      # True
True and False     # False
False or True      # True
not True           # False

حيث تُجديك حقًّا هو لصق المقارنات في بوابةٍ واحدة. مكانٌ ليلي، تنبيهُ طقسٍ، يوم عمل:

python
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")

كلُّ واحدٍ منها سؤالٌ واحدٌ مؤلفٌ من أسئلةٍ أصغر ، مثلما ألفَ 0x<100 \leq x < 10 الفتراتَ في الدرس السابق.

التقييم بقصر الدائرة

يسرد جدول الصدق الكامل أربعة صفوف، لكن بايثون لا تحتاجها دائمًا. قيّم AA and BB حين تكون A=FalseA = \mathrm{False}: الجواب False مهما كانت BB، فلا تُحسب BB أبدًا. وينطبق الجدار نفسه على or: بمجرد أن تصبح AA مساويةً True، يكون الناتج محسومًا. تقرأ بايثون من اليسار إلى اليمين وتتوقف عند أول جوابٍ حاسم.

ليست هذه نعمةً أدائية؛ إنه جهازُ أمان:

python
x = 0
# لا تحدث قسمة أصلًا — الصفر زائف، فيُتخطى النصف الثاني
result = x != 0 and 10 / x > 2

لو قيّمت بايثون الطرفين، لانكسر 10/x10/x بقسمةٍ على صفر. كلمة and بوابةُ تفتيشٍ قبل الإقلاع: ترفض أن تطير بالشرط الثاني ما لم يُخلي السبيلَ الشرطُ الأول. لذلك تكتب بايثون and/or حيث تكتب لغات عائلة C &&/|| ، تحمل الكلمات نفس قصر الدائرة دون رموز مبهمة.

مقايضتا دي مورغان

أكثر المتطابقات المنطقية إعادةً للاستخدام تُمرّر النفي عبر رابط:

  • ¬(AB)(¬A)(¬B)\neg(A \land B) \equiv (\neg A) \lor (\neg B) ، not (A and B)not A or not B
  • ¬(AB)(¬A)(¬B)\neg(A \lor B) \equiv (\neg A) \land (\neg B) ، not (A or B)not A and not B

في بايثون، نفيُ شرطٍ موصولٍ يصير شرطًا موصولًا من النفيين:

python
# هاتان متكافئتان:
not (age >= 18 and has_ticket)
age < 18 or not has_ticket

الصيغة المعاد كتابتها تُقرأ بسلاسة: البوابة لا تفتح لقاصرٍ ولا لغيرِ حاملِ تذكرة. قوانين دي مورغان هي الأداة لتحويل not (…) الكثيف الذي تحتاج فكّكه إلى قراءةٍ واضحة.

جداول الصدق في لمحة

AABBABA \land BABA \lor B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

أمّا ¬\lnot فيقلب قيمة الصدق الواحدة: not TrueFalse، وnot FalseTrue.

مثالٌ محلول: بابُ النادي، حكايةً مزدوجة

بابٌ واحدٌ وحكمٌ واحدٌ وصياغتانِ. ترفضُ قاعدةُ الدخولِ من ليس بالغًا أو لا يحملُ تذكرةً:

python
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)؟

booleanandornotshort-circuitlogic