مسیر
/
Python
Python
/
برنامه‌ی درسی
/
مقادیر منطقی
مق

مقادیر منطقی در Python

70 تمرین

درباره‌ی مقادیر منطقی

پایتون مقادیر «درست» و «غلط» را با نوع bool نمایش می‌دهد که زیرکلاسی از int است. فقط دو مقدار «منطقی» در این نوع وجود دارد: True و False. این مقادیر را می‌توان به یک متغیر نسبت داد و با عملگرهای منطقی (and، or، not) ترکیب کرد:

>>> true_variable = True and True
>>> false_variable = True and False

>>> true_variable = False or True
>>> false_variable = False or False

>>> true_variable = not False
>>> false_variable = not True

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

هر یک از این عملگرها اولویت متفاوتی دارند، به‌طوری که not پیش از and و or ارزیابی می‌شود. می‌توان از پرانتزها استفاده کرد تا بخشی از عبارت پیش از بخش‌های دیگر ارزیابی شود:

>>> not True and True
False

>>> not (True and False)
True

اولویت همه‌ی boolean operators پایین‌تر از comparison operators پایتون در نظر گرفته می‌شود، مانند ==، >، <، is و is not.

تبدیل نوع و درستینمایی

تابع bool (bool()) هر شیء را به یک مقدار منطقی تبدیل می‌کند. به‌طور پیش‌فرض، همه‌ی اشیاء True برمی‌گردانند، مگر اینکه طوری تعریف شده باشند که False برگردانند.

چند مورد از built-ins طبق تعریف همیشه False در نظر گرفته می‌شوند:

  • ثابت‌های None و False
  • صفرِ هر نوع عددی (int، float، complex، decimal یا fraction)
  • دنباله‌ها و مجموعه‌های خالی (str، list، set، tuple، dict، range(0))
>>> bool(None)
False

>>> bool(1)
True

>>> bool(0)
False

>>> bool([1,2,3])
True

>>> bool([])
False

>>> bool({"Pig" : 1, "Cow": 3})
True

>>> bool({})
False

وقتی یک شیء در یک زمینه‌ی منطقی به کار می‌رود، با استفاده از bool() به‌طور خودکار به عنوان درستینما یا غلط‌نما ارزیابی می‌شود:

>>> a = "is this true?"
>>> b = []

# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
...  print("True")

# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
...   print("False")

کلاس‌ها می‌توانند تعیین کنند که در موقعیت‌های درستینما چگونه ارزیابی شوند، به شرط اینکه متد __bool__() و/یا متد __len__() را بازنویسی و پیاده‌سازی کنند.

نحوه‌ی کار مقادیر منطقی در پشت صحنه

نوع bool به عنوان زیرنوعی از int پیاده‌سازی شده است. این یعنی True از نظر عددی برابر با 1 است و False از نظر عددی برابر با 0 است. این موضوع هنگام مقایسه‌ی آن‌ها با یک عملگر برابری دیده می‌شود:

>>> 1 == True
True

>>> 0 == False
True

با این حال، bools هنوز متفاوت‌اند از ints، همان‌طور که هنگام مقایسه‌ی آن‌ها با عملگر هویت، is، مشخص می‌شود:

>>> 1 is True
False

>>> 0 is False
False

نکته: در پایتون نسخه‌ی ۳.۸ و بالاتر، استفاده از یک مقدار ثابت (مانند 1، ''، [] یا {}) در سمت چپ is باعث ایجاد هشدار می‌شود.

استفاده از عملگر برابری برای مقایسه‌ی یک متغیر منطقی با True یا False یک ضدالگوی پایتون در نظر گرفته می‌شود. در عوض، باید از عملگر هویت is استفاده کرد:


>>> flag = True

# Not "Pythonic"
>>> if flag == True:
...    print("This works, but it's not considered Pythonic.")

# A better way
>>> if flag:
...    print("Pythonistas prefer this pattern as more Pythonic.")
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

مقادیر منطقی را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین مقادیر منطقی قفل 2 تمرین دیگر را باز کنید