cb
codebamin
الفصل 10 · المعاملات المنطقية (Boolean Operators)

المعامل المنطقي and

هناك عامل منطقي آخر في بايثون هو and.

التعبير A and B تكون قيمته True فقط إذا كانت A وB كلتاهما True. وفي أي حالة أخرى تكون النتيجة False.

جرّبه في الطرفية:

True and True

جيد، جرّب الآن:

True and False

ماذا تتوقع؟ توقع النتيجة قبل التنفيذ.

وأخيرًا جرّب:

False and False

لنتدرّب. كتبنا سابقًا دالة is_valid_percentage باستخدام or. هذا مثال لحل صحيح:

__copyable__ def is_valid_percentage(x): if x < 0 or x > 100: return False else: return True

check_result(is_valid_percentage(-1), False) check_result(is_valid_percentage(0), True) check_result(is_valid_percentage(50), True) check_result(is_valid_percentage(100), True) check_result(is_valid_percentage(101), False)

أعد كتابة الدالة باستخدام and بدلًا من or.

الحل باستخدام or يبدأ باكتشاف أن x غير صالحة، ثم يعتبر غير ذلك صالحًا. مع and اعكس الفكرة: عبّر مباشرة عن كون x داخل المجال الصحيح، ثم عدّل قيم return وعوامل المقارنة بما يناسب ذلك.

رائع! أحد الحلول الممكنة هو:

def is_valid_percentage(x): if 0 <= x and x <= 100: return True else: return False

وكما فعلنا سابقًا، يمكن تبسيطه إلى:

def is_valid_percentage(x): return 0 <= x and x <= 100

وهناك اختصار إضافي يسمى سلسلة المقارنات (comparison chaining). أي شرط من الشكل:

a < b and b < c

يمكن اختصاره إلى:

a < b < c

يعمل ذلك مع عوامل المقارنة الأخرى أيضًا، ومنها ==، ويمكن أن يختلف العاملان. لذلك يمكن كتابة الحل النهائي هكذا:

def is_valid_percentage(x): return 0 <= x <= 100

التمرين التالي: لديك قائمة من ثلاثة عناصر، وتريد التحقق هل العناصر الثلاثة كلها متساوية:

__copyable__ def all_equal(row): ...

check_result(all_equal(["X", "X", "X"]), True) check_result(all_equal(["O", "O", "O"]), True) check_result(all_equal(["X", "O", "X"]), False)

القائمة تحتوي دائمًا على ثلاثة عناصر، لذلك لا تحتاج إلى حلقة. يجب أن يكون العنصر الأول مساويًا للثاني، ومساويًا للثالث أيضًا.

أحسنت. توجد عدة حلول صحيحة، منها:

def all_equal(row): return row[0] == row[1] and row[0] == row[2]

أو باستخدام المقارنة المتسلسلة:

return row[0] == row[1] == row[2]

أو بمقارنة الصف بقائمة تحتوي العنصر الأول ثلاث مرات:

return row == [row[0], row[0], row[0]]

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>