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

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

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

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

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

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

  • A∧BA \land B تُكتب and
  • A∨BA \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")

كلُّ واحدٍ منها سؤالٌ واحدٌ مؤلفٌ من أسئلةٍ أصغر ، مثلما ألفَ 0≤x<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 &&/|| ، تحمل الكلمات نفس قصر الدائرة دون رموز مبهمة.

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

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

  • ¬(A∧B)≡(¬A)∨(¬B)\neg(A \land B) \equiv (\neg A) \lor (\neg B) ، not (A and B) ≡ not A or not B
  • ¬(A∨B)≡(¬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 (…) الكثيف الذي تحتاج فكّكه إلى قراءةٍ واضحة.

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

AABBA∧BA \land BA∨BA \lor B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

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

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

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

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