العاملان and وor يُستخدمان بين قيمتين منطقيتين، ولذلك يسمَّيان عاملين ثنائيين (binary operators). أما not فيأتي قبل قيمة منطقية واحدة فقط، ولذلك يسمى عاملًا أحاديًا (unary operator).
يقلب not القيمة المنطقية التي يطبّق عليها، بطريقة تشبه تأثير إشارة السالب على العدد. جرّب في الطرفية:
not True
أحسنت! إليك حلين صحيحين:
def invalid_image(filename): return not (filename.endswith(".png") or filename.endswith(".jpg"))
def invalid_image(filename): return not filename.endswith(".png") and not filename.endswith(".jpg")
هاتان الصيغتان متكافئتان منطقيًا وفق ما يعرف بقانون دي مورغان.
لاحظ أيضًا نمطًا عامًا آخر للتبسيط. إذا كان لديك:
if x: return False else: return True
وكان x نفسه قيمة منطقية، فيمكن اختصار الكود إلى:
return not x