المعامل المنطقي and
هناك عامل منطقي آخر في بايثون هو and.
التعبير A and B تكون قيمته True فقط إذا كانت A وB كلتاهما True. وفي أي حالة أخرى تكون النتيجة False.
جرّبه في الطرفية:
True and True
جيد، جرّب الآن:
True and False ماذا تتوقع؟ توقع النتيجة قبل التنفيذ.
وأخيرًا جرّب:
False and False
لنتدرّب. كتبنا سابقًا دالة is_valid_percentage باستخدام or. هذا مثال لحل صحيح:
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 وعوامل المقارنة بما يناسب ذلك.
If you have something like
x < 0 and x > 100, you're on the wrong track. That's going to beFalsefor any value ofx!The solution with
andis different in several ways from the solution withor.Our solution with
orfirst determines ifxis an invalid percentage, else concludes validity. Usingandwill do this in reverse.You will have to reverse the
returnstatements accordingly.You will have to change the comparison operators too.
رائع! أحد الحلول الممكنة هو:
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 التمرين التالي: لديك قائمة من ثلاثة عناصر، وتريد التحقق هل العناصر الثلاثة كلها متساوية:
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)
القائمة تحتوي دائمًا على ثلاثة عناصر، لذلك لا تحتاج إلى حلقة. يجب أن يكون العنصر الأول مساويًا للثاني، ومساويًا للثالث أيضًا.
The list will always have 3 elements.
That means you don't need to use a loop.
تذكر أن you can get the first element using
row[0].The first element, second element, and third element all need to be equal.
That means the first element should be equal to the second element and also the third element.
أحسنت. توجد عدة حلول صحيحة، منها:
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]]