عملگرهای منطقی پایتون و یا، و نه (ارتباط منطقی، تفکیک، نفی)

کسب و کار

پایتون عملگرهای منطقی را برای انجام عملیات منطقی (بولی) فراهم می کند.(and،or،not)
برای توصیف رابطه بین چند شرط در یک دستور if استفاده می شود.

این بخش موارد زیر را شرح می دهد.

  • تقاطع:and
  • اضافه کردن منطقی:or
  • انکار:not
  • and،or،notتقدم اپراتور

ضمناً نکات زیر به عنوان احتیاط توضیح داده شده است.

  • عملگرهای منطقی برای اشیا از نوع دیگری غیر از bool
  • and،orاین مقادیر بازگشتی لزوماً از نوع bool نیستند.
  • اتصال کوتاه (ارزیابی اتصال کوتاه)

تقاطع:and

و حاصلضرب منطقی دو مقدار را برمی گرداند.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

در واقع، اغلب نه برای درست یا نادرست، بلکه برای عبارات شرطی با استفاده از عملگرهای مقایسه استفاده می شود. برای اطلاع شما عملگرهای مقایسه به شرح زیر است.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

و به صورت زیر قابل الحاق است.

print(0 < a < 100)
# True

اضافه کردن منطقی:or

یا OR منطقی دو مقدار را برمی گرداند.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

انکار:not

not” نفی مقدار را برمی گرداند؛ true و false معکوس می شوند.

print(not True)
# False

print(not False)
# True

and،or،notتقدم اپراتور

ترتیب تقدم این عملگرهای منطقی به شرح زیر است: not بالاترین است.

  1. not
  2. and
  3. or

در کد نمونه زیر، عبارت فوق طوری تفسیر می شود که گویی عبارت زیر است. از آنجایی که هیچ مشکلی با پرانتزهای اضافی وجود ندارد، ممکن است در مواردی مانند این مثال، توضیح واضح آنها آسانتر باشد.

print(True or True and False)
# True

print(True or (True and False))
# True

اگر می خواهید عمل کنید یا قبل از و، از () پرانتز استفاده کنید.

print((True or True) and False)
# False

<،>این عملگرهای مقایسه حتی اولویت بالاتری نسبت به نداشتن دارند. بنابراین، همانطور که در مثال بالا وجود داشت، برای هر عملیات مقایسه نیازی به پرانتز نیست.

print(0 < a and a < 100)
# True

برای خلاصه ای از اولویت عملگر در پایتون به مستندات رسمی زیر مراجعه کنید.

عملگرهای منطقی برای اشیا از نوع دیگری غیر از bool

With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.

اشیاء زیر در عملیات منطقی پایتون نادرست در نظر گرفته می شوند.

  • ثابت هایی که به صورت نادرست تعریف شده اند:None،false
  • صفر در انواع عددی:0،0،0j،Decimal(0)،Fraction(0, 1)
  • دنباله یا مجموعه خالی:'،()،[]،{}،set()،range(0)

تمام مقادیر دیگر درست در نظر گرفته می شوند.

تابع bool() می تواند برای بدست آوردن مقدار بولی یک شی استفاده شود. توجه داشته باشید که رشته ‘0’ یا ‘False’ درست در نظر گرفته می شود.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

برای در نظر گرفتن «0» یا «false» در یک رشته به عنوان false، از ()distutils.util.strtobool استفاده کنید.

and،orاین مقادیر بازگشتی لزوماً از نوع bool نیستند.

در اینجا مثالی از یک شی غیر از نوع bool آورده شده است که نتیجه هر عملگر را روی یک مقدار عددی نشان می دهد.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

همانطور که از مثال بالا می بینید، و و یا در پایتون، true یا false را از نوع bool برمی گردانند، بلکه بسته به درست یا نادرست بودن مقدار سمت چپ یا راست را برمی گردانند. مثال عددی است، اما همین امر در مورد انواع دیگر مانند رشته ها و لیست ها صدق می کند. در ضمن، not true یا false از نوع bool را برمی گرداند.

تعاریف مقادیر بازگشتی و و یا به شرح زیر است.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

وقتی مقادیر عبارات چپ و راست به طور جداگانه درست و نادرست باشند، مقادیر بازگشتی به راحتی قابل درک هستند. از طرف دیگر، اگر هر دو درست یا نادرست باشند، مقدار بازگشتی بسته به ترتیب متفاوت خواهد بود.

اگر از آن به عنوان یک عبارت شرطی در یک دستور if و غیره استفاده کنید، نتیجه به عنوان یک مقدار بولی ارزیابی می شود و پردازش می شود، بنابراین لازم نیست نگران آن باشید، اما اگر از مقدار بازگشتی برای پردازش بیشتر استفاده کنید، شما باید مراقب بود

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

اگر می خواهید آن را درست یا نادرست در نظر بگیرید، می توانید مانند مثال آخر عمل کنید.
bool(x and y)

مقادیر بازگشتی و و یا در جدول زیر خلاصه شده است.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

اتصال کوتاه (ارزیابی اتصال کوتاه)

همانطور که از جدول بالا می بینید، اگر x در x و y نادرست باشد، یا اگر x در x یا y درست باشد، بدون توجه به مقدار y، مقدار بازگشتی x خواهد بود.

در چنین حالتی y ارزیابی نمی شود.

and،orتوجه داشته باشید که اگر تابع یا متدی را در سمت راست این فرآیندها فراخوانی کنید تا مقداری پردازش انجام شود، بسته به نتیجه سمت چپ، ممکن است فرآیند اجرا نشود.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True
Copied title and URL