اذهب إلى المحتوى

فهم العمليات المنطقية في بايثون 3


محمد بغات

هناك قيمتان فقط لنوع البيانات المنطقية، وهما True و False. تُستخدم الحسابات المنطقية في البرمجة لإجراء الموازنات، والتحكم في مسار البرنامج.

تمثِّل القيم المنطقية قيم الحقيقة (truth values) في علم المنطق في الرياضيات. وتٌكتب القيمتان True و False دائمًا بالحرفين الكبيرين T و F على التوالي، لأنهما قيمتان خاصتان في بايثون.

في هذه المقالة، سنتعرف على العمليات المنطقية في بايثون، بما في ذلك الموازنة المنطقية، والعوامل المنطقية، وجداول الحقيقة.

فهم العمليات المنطقية.jpg

عوامل الموازنة

في البرمجة، تُستخدم عوامل الموازنة للموازنة بين القيم، وتعيد إحدى القيمتين المنطقتين True و False.

يوضح الجدول أدناه عوامل الموازنة المنطقية.

العامل الشرح
== تساوي
!= تخالف
< أصغر من
> أكبر من
<= أصغر من أو تساوي
>= أكبر من أو تساوي

لفهم كيفية عمل هذه العوامل، سنستخدم المتغيرين التاليين:

x = 5
y = 8

في هذا المثال، لمّا كان x يساوي 5، فهو أصغر من y ذي القيمة 8.

باستخدام هذين المتغيرين والقيم المرتبطة بهما، سنجرّب العوامل من الجدول أعلاه. سنطلب من بايثون أن تطبع ناتج عملية الموازنة، إما True أو False. لتوضيح المثال أكثر، سنطبع سلسلة نصية لتوضيح ما جرى تقييمه.

x = 5
y = 8

print("x == y:", x == y)
print("x != y:", x != y)
print("x < y:", x < y)
print("x > y:", x > y)
print("x <= y:", x <= y)
print("x >= y:", x >= y)

والمخرجات هي:

x == y: False
x != y: True
x < y: True
x > y: False
x <= y: True
x >= y: False

باتباع المنطق الرياضي، في كل من التعبيرات المذكورة أعلاه، هذه نتيجة الموازنات:

  • 5 (x) تساوي 8 (yخطأ
  • 5 تخالف 8؟ صح
  • 5 أصغر من 8؟ صح
  • 5 أكبر من 8؟ خطأ
  • 5 أصغر من أو يساوي 8؟ صح
  • 5 ليس أصغر من أو يساوي 8؟ خطأ

رغم أننا استخدمنا الأعداد الصحيحة هنا، إلا أنه بإمكاننا استبدال الأعداد العشرية بها.

يمكن أيضًا استخدام السلاسل النصية مع العوامل المنطقية. وهي حساسة لحالة الأحرف، ما لم تستخدم تابعًا إضافيًا للسلاسل النصية.

المثال التالي يوضح كيفية موازنة السلاسل النصية:

Sammy = "Sammy"
sammy = "sammy"

print("Sammy == sammy: ", Sammy == sammy)        # Sammy == sammy:  False

السلسلة "Sammy" أعلاه لا تساوي السلسلة النصية "sammy"، لأنهما ليستا متماثلتين تمامًا؛ فإحداهما تبدأ بحرف كبير S، والأخرى بحرف صغير s. ولكن لو أضفنا متغيرًا آخر قيمته "Sammy"، فستكونان متساويتين:

Sammy = "Sammy"
sammy = "sammy"
also_Sammy = "Sammy"

print("Sammy == sammy: ", Sammy == sammy)                   # Sammy == sammy:  False
print("Sammy == also_Sammy", Sammy == also_Sammy)   # Sammy == also_Sammy:  True

يمكنك أيضًا استخدام عوامل الموازنة الأخرى، بما في ذلك > و < لموازنة سلسلتين نصيتين. ستوازن بايثون هذه السلاسل النصية بحسب الترتيب المعجمي في نظام محارف ASCII.

يمكننا أيضًا تقييم القيم المنطقية باستخدام عوامل الموازنة:

t = True
f = False

print("t != f: ", t != f)      #   t != f:  True

تبيّن الشيفرة البرمجية أعلاه أنّ True لا تساوي False.

لاحظ الفرق بين العاملين = و ==.

x = y   # x إلى  y إسناد قيمة
x == y  # متساويين  x و  y تتحقق مما إذا كان

الأول =، هو عامل الإسناد (assignment operator)، والذي سيحدد قيمة أحد المتغيرين، ويجعلها مساوية لقيمة الآخر. الثاني ==، وهو عامل الموازنة الذي سيحدد ما إذا كانت القيمتان متساويتان.

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

هناك ثلاثة عوامل منطقية تُستخدم لموازنة القيم. وتعيد إما True أو False. هذه العوامل هي، and (و)، و or (أو)، و not (النفي)، وقد عرّفناها في الجدول أدناه.

العامل الشرح الصياغة
and إن كان كلا التعبيرين صحيحين True x and y
or إن كان أحد التعبيرين على الأقل صحيحًا True x or y
not إن كان التعبير خطأ True not x

عادةً ما تُستخدم العوامل المنطقية لتقييم ما إذا كان تعبيران منطقيان صحيحان أم لا. على سبيل المثال، يمكن استخدامها لتحديد ما إذا كان الطالب قد نجح، وأنه مُسجل في الفصل، وإذا كانت كلتا الحالتان صحيحتان، فسيتم إدخال الطالب إلى النظام. مثال آخر هو تحديد ما إذا كان المستخدم عميلًا نشطًا لمتجر إلكتروني استنادًا إلى ما إذا كان لديه رصيد في المتجر، أو أنه اشترى خلال الأشهر الستة الماضية.

لفهم كيفية عمل العوامل المنطقية، دعنا نقيّم التعبيرات الثلاث التالية:

print((9 > 7) and (2 < 4))    # كلا التعبيرين صحيحان
print((8 == 8) or (6 != 6))   # أحد التعبيرين صحيح 
print(not(3 <= 1))             # التعبير الأصلي  خاطئ

والمخرجات هي:

True
True
True

في الحالة الأولى، ((9> 7) و (2 <4))print، كلا التعبيرين 9> 7 و 2 <4 ينبغي أن يكونا صحيحين لأنّ العامل and مُستخدَم.

في الحالة الثانية، print((8 == ? or (6 != 6))‎بما أنّ قيمة 8 == 8 تم تقييمها بـ True، فإنّ نتيجة تقييم ‎6 != 6‎لا تهم. لكن لو استخدمنا العامل and، لتمّ تقييم العبارة المنطقية بالقيمة False.

في الحالة الثالثة، print(not(3 <= 1))‎، العامل not ينفي القيمة False التي تعيدها العملية المنطقية 3 <= 1.

في المثال التالي سنستبدل بالأعداد العشرية أعدادًا صحيحة:

print((-0.2 > 1.4) and (0.8 < 3.1))    # أحد التعبيرين خاطئ 
print((7.5 == 8.9) or (9.2 != 9.2))     # كلا التعبيرين خاطئان
print(not(-5.7 <= 0.3))                  # التعبير الأصلي صحيح

في المثال أعلاه:

  • and: يجب أن يكون واحد على الأقل من التعبيرين خاطئًا لتعيد القيمة False،
  • or: يجب أن يكون كلا التعبيرين خاطئين لتعيد القيمة False،
  • not: يجب أن يكون التعبير المرافق لها صحيحًا حتى تعيد القيمة False.

إذا لم تكن النتائج أعلاه واضحة لك، فسنعرض بعض جداول الحقيقة أدناه لتفهم الأمر بشكل أفضل.

يمكنك أيضًا كتابة عبارات مركبة باستخدام and, و or, و not:

not((-0.2 > 1.4) and ((0.8 < 3.1) or (0.1 == 0.1)))

التعبير الداخلي: (0.8 <3.1) أو (0.1 == 0.1). يعيد القيمة True، لأنّ كلا العبارتين الرياضيتين تعيدان True.

الآن، نأخذ القيمة المُعادة True ونجمعها مع التعبير المنطقي التالي: (‎-0.2> 1.4) and (True). هذا المثال يعيد False، لأنّ العبارة ‎-0.2> 1.4 تعيد القيمة False، و ‎(False) and (True)‎ تعيد False.

أخيرًا، يعيد التعبير الخارجي: not (False)‎ القيمة True، وبالتالي ستكون القيمة النهائية المعادة هي:

True

جداول الحقيقة (Truth Tables)

المنطق مجال واسع، وسنكتفي في هذه المقالة ببعض الأفكار المهمة التي يمكن أن تساعدك على تحسين طريقة تفكيرك وخوارزمياتك.

فيما يلي جداول الحقيقة لعامل الموازنة ==، والعوامل المنطقية and, و or, و not. من المفيد أن تحفظ كيفية عملها، فذلك سيجعلك أسرع في اتخاذ القرارات أثناء كتابة الشيفرات البرمجية.

جدول الحقيقة الخاص بالعامل ==

x == y القيمة المُعادة
True == True True
True == False False
False == True False
False == False True

جدول الحقيقة الخاص بالعامل AND

x and y القيمة المُعادة
True and True True
True and False False
False and True False
False and False False

جدول الحقيقة الخاص بالعامل OR

x or y القيمة المُعادة
True or True True
True or False True
False or True True
False and False False

جدول الحقيقة الخاص بالعامل NOT

not x القيمة المُعادة
not True False
not False True

تُستخدم جداول الحقيقة في المنطق الرياضياتي كثيرًا، وهي مفيدة، ويجب حفظها ووضعها في الحسبان عند إنشاء الخوارزميات البرمجية.

استخدام العوامل المنطقية للتحكم في مسار البرنامج

للتحكم في مسار ونتائج البرنامج عبر العبارات الشرطية (flow control statements)، يمكننا استخدام شرط (condition) متبوعًا بعبارة برمجية (clause).

يتم تقييم الشرط بإحدى القيمتين True أو False، تلك القيمة تُستخدم لاتخاذ قرار في البرنامج. أما العبارة (clause) فهي الكتلة البرمجية التي تعقب الشرط وتحدِّد نتيجة البرنامج وما ينبغي فعله في حال تحقق الشرط.

تُظهر الشيفرة أدناه مثالًا على عوامل الموازنة التي تعمل مع العبارات الشرطية للتحكم في مسار البرنامج:

if grade >= 65:                 # شرط
    print("Passing grade")      # بند

else:
    print("Failing grade")

سيحدد هذا البرنامج ما إذا كان الطالب سينجح أم يرسب. في حال كانت الدرجة التي حصل عليها الطالب تساوي 83 مثلًا، فتقييم العبارة الأولى سيكون True، وسيُطبَع النص "Passing grade. أما إن كانت درجة الطالب هي 59، فتقييم العبارة الأولى سيكون False، وبالتالي سينتقل البرنامج لتنفيذ العبارة المرتبطة بالتعبير else، أي سيطبع Failing grade.

يمكن تقييم كل كائنات بايثون بإحدى القيمتين True أو False، لذلك يوصي الدليل PEP 8 بعدم موازنة كائن بإحدى القيمتين True أو False، لأنّ ذلك قد يؤدي إلى إعادة قيم منطقية غير متوقعة. على سبيل المثال، عليك تجنب استخدام مثل هذه العبارة sammy == True في برامجك.

تساعد العوامل المنطقية على صياغة شروط يمكن استخدامها لتحديد النتيجة النهائية للبرنامج من خلال التحكم في مسار التنفيذ.

خلاصة

ألقينا في هذه المقالة نظرة على الموازنات والعوامل المنطقية، بالإضافة إلى جداول الحقيقة، وكيفية استخدام القيم المنطقية للتحكم في مسار البرنامج.

هذه المقالة جزء من سلسة مقالات حول تعلم البرمجة في بايثون 3.

ترجمة -وبتصرّف- للمقال Understanding Boolean Logic in Python 3 لصاحبته Lisa Tagliaferri

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...