استفاده از عملگر and در پایتون

امیرحسین بیگدلو 4 ماه قبل

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

 

# شروع به کار با اپراتور and پایتون

عملگر and دو مقدار می گیرد که میتوانند عبارتهای بولی، آبجکت یا ترکیبی باشند. با آن مقادیر، عبارات مفصل تری می سازد. آن مقادیر در عملگر and به عنوان شرایط شناخته میشوند. اگر هر دو شرط درست باشد، عبارت and مقدار true را برمی گرداند. در غیر این صورت ، نتیجه False را برمی گرداند:

>>> True and True
True

>>> False and False
False

>>> True and False
False

>>> False and True
False

 

این مثالها نشان می دهد که عبارت and فقط وقتی True را برمی گرداند که هر دو مقدار در عبارات درست باشند. از آنجا که عملگر and دو مقدار برای ساختن یک عبارت می گیرد، یک عملگر باینری است.

دوره پیشنهادی: دوره آموزش پایتون (python)

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

operand1 operand2 operand1 and operand2
True True True
True False False
False False False
False True False

 

این جدول مقدار حقیقت حاصل از یک عبارت بولی مانند operand1 و operand2 را خلاصه می کند. نتیجه عبارت به مقادیر حقیقت عملوندهای آن بستگی دارد. اگر هر دو درست باشد true خواهد بود. در غیر این صورت، false خواهد بود این منطق کلی پشت عملگر and است. با این حال ، این اپراتور می تواند بیش از آنچه در پایتون انجام می دهد ، انجام دهد. 

 

 

# استفاده از عملگر and در کنار عبارات boolean پایتون

شما معمولاً از عملگرهای منطقی برای ساختن عبارات بول ترکیبی استفاده می کنید که ترکیبی از متغیرها و مقادیر هستند و در نتیجه مقدار بولی تولید می کنند. به عبارت دیگر ، عبارات بولی True یا False را برمی گردانند.

 

مقایسه و تست برابری، نمونه های رایج این نوع عبارت هستند:

>>> 5 == 3 + 2
True
>>> 5 > 3
True
>>> 5 < 3
False
>>> 5 != 3
True

>>> [5, 3] == [5, 3]
True

>>> "hi" == "hello"
False

 

همه این عبارات True یا False را برمی گردانند، به این معنی که آنها عبارات بولی هستند. شما می توانید آنها را با استفاده از کلمه کلیدی  and ترکیب کنید تا عبارات ترکیبی ایجاد شود که همزمان دو یا چند عبارت را آزمایش می کند:

>>> 5 > 3 and 5 == 3 + 2
True

>>> 5 < 3 and 5 == 5
False

>>> 5 == 5 and 5 != 5
False

>>> 5 < 3 and 5 != 5
False

 

در اینجا، وقتی دو عبارت True را با هم ترکیب می کنید، در نتیجه True می گیرید. هر ترکیب دیگری False را برمی گرداند. از این مثالها می توانید نتیجه بگیرید که نحو ایجاد عبارات مرکب بولی با عملگر and زیر است:

expression1 and expression2

 

اگر هر دو عبارت expression1 و expression2 بر روی True ارزیابی شوند ، آنگاه عبارت مرکب True است. اگر حداقل یک عبارت بر روی False ارزیابی شود، نتیجه آن False است.

 

هیچ محدودیتی در تعداد و عملگرهایی که می توانید هنگام ساختن عبارت مرکب استفاده کنید وجود ندارد. این بدان معناست که می توانید بیش از دو عبارت را در یک عبارت واحد با استفاده از چندین عملگر and ترکیب کنید:

>>> 5 > 3 and 5 == 3 + 2 and 5 != 3
True

>>> 5 < 3 and 5 == 3 and 5 != 3
False

 

مجدداً، اگر همه عبارات را روی True ارزیابی کنید، پس True را دریافت می کنید. در غیر این صورت، شما False می شوید. به خصوص با طولانی شدن عبارات، باید به خاطر داشته باشید که پایتون عبارات را به ترتیب از چپ به راست ارزیابی می کند.

 

 

# اتصال کوتاه به ارزیابی - lazy evaluation

عملگرهای منطقی پایتون مانند and و or از چیزی به نام ارزیابی اتصال کوتاه یا ارزیابی تنبل استفاده می کنند. به عبارت دیگر، پایتون عبارت سمت راست را تنها در مواقعی که لازم است ارزیابی می کند.

مقاله پیشنهادی: آینده پایتون

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

 

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

 

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

 

برای نشان دادن ویژگی اتصال کوتاه ، به مثال های زیر توجه کنید:

>>> def true_func():
...     print("Running true_func()")
...     return True
...

>>> def false_func():
...     print("Running false_func()")
...     return False
...

>>> true_func() and false_func()  # Case 1
Running true_func()
Running false_func()
False

>>> false_func() and true_func()  # Case 2
Running false_func()
False

>>> false_func() and false_func()  # Case 3
Running false_func()
False

>>> true_func() and true_func()  # Case 4
Running true_func()
Running true_func()
True

 

نحوه عملکرد این کد در اینجا آمده است:

+ Case 1: پایتون true_func () را ارزیابی می کند ، که True را برمی گرداند. برای تعیین نتیجه نهایی، پایتون false_func () را ارزیابی می کند و False می شود. با مشاهده خروجی هر دو عملکرد می توانید این را تأیید کنید.

 

+ Case 2: پایتون () false_func را ارزیابی می کند، که False را برمی گرداند. پایتون از قبل می داند که نتیجه نهایی False است ، بنابراین true_func () را ارزیابی نمی کند.

 

+ Case 3: پایتون () false_func را اجرا می کند و در نتیجه False می شود. نیازی به ارزیابی عملکرد تکراری برای بار دوم نیست.

 

+ Case 4: پایتون true_func () را ارزیابی می کند و در نتیجه True می شود. سپس دوباره فانکشن را ارزیابی می کند. از آنجا که هر دو عملوند به True ارزیابی می شوند ، نتیجه نهایی True است.

 

 

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

 

گاهی اوقات ممکن است بخواهید از ارزیابی تنبل در یک عبارت خاص بولی اجتناب کنید. می توانید این کار را با استفاده از عملگرهای بیتی (&، |، ~) انجام دهید. این عملگرها در عبارات بولی نیز کار می کنند، اما عملوندها را مشتاقانه ارزیابی می کنند:

>>> def true_func():
...     print("Running true_func()")
...     return True
...

>>> def false_func():
...     print("Running false_func()")
...     return False
...

>>> # Use logical and
>>> false_func() and true_func()
Running false_func()
False

>>> # Use bitwise and
>>> false_func() & true_func()
Running false_func()
Running true_func()
False

 

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

 

 

# استفاده عملگر and پایتون با آبجکت‌های متداول

می توانید از عملگر and برای ترکیب دو شیء پایتون در یک عبارت واحد استفاده کنید. در آن موقعیت، پایتون به طور داخلی از bool () برای تعیین مقدار حقیقی عملوندها استفاده می کند. در نتیجه، به جای مقدار Boolean، یک شی خاص دریافت می کنید. شما فقط در صورتی True یا False دریافت می کنید که یک عملوند True یا False را ارزیابی کند:

>>> 2 and 3
3

>>> 5 and 0.0
0.0

>>> [] and 3
[]

>>> 0 and {}
0

>>> False and ""
False

 

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

 

در اینجا خلاصه رفتار اپراتور and پایتون در زمان استفاده کنار آبجکت‌ها آورده شده‌اند:

object1 object2 object1 and object2
False False object1
False True object1
True True object2
True False object2

 

 

# ترکیب عبارات و آبجکت بولی

شما همچنین می توانید عبارات بولی و اشیاء رایج پایتون را در یک عبارت and ترکیب کنید. در آن موقعیت، عبارت and همچنان عملوند چپ را در صورت False بودن برمی گرداند، وگرنه عملوند راست را برمی گرداند. بسته به اینکه کدام قسمت از عبارت آن نتیجه را ارائه دهد، مقدار برگشتی می تواند True ، False یا یک شیء معمولی باشد:

>>> 2 < 4 and 2
2
>>> 2 and 2 < 4
True

>>> 2 < 4 and []
[]
>>> [] and 2 < 4
[]

>>> 5 > 10 and {}
False
>>> {} and 5 > 10
{}

>>> 5 > 10 and 4
False
>>> 4 and 5 > 10
False

 

این مثالها از ترکیبی از عبارات بولی و آبجکت‌های متداول پایتون استفاده می کنند. در هر جفت مثال، می بینید که می توانید یک شیء غیر بولی یا یک مقدار بولی، True یا False دریافت کنید. نتیجه بستگی به این دارد که کدام قسمت عبارت نهایی را ارائه دهد.

 

 

# ترکیب عملگرهای منطقی پایتون

همانطور که قبلاً در این آموزش مشاهده کردید، پایتون دو عملگر منطقی اضافی را ارائه می دهد: عملگر or و عملگر not. می توانید از آنها به همراه عملگر and برای ایجاد عبارات مرکب پیچیده تر استفاده کنید. اگر می خواهید عبارات دقیق و واضحی با چندین عملگر منطقی ایجاد کنید، باید اولویت هر عملگر را در نظر بگیرید. به عبارت دیگر ، شما باید ترتیب اجرای پایتون را در نظر بگیرید.

 

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

>>> 5 or 2 and 2 > 1
5

>>> (5 or 3) and 2 > 1
True

 

این مثالها عملگر or و عملگر and را در یک عبارت مرکب ترکیب می کنند. درست مانند اپراتور and، اپراتور or نیز از ارزیابی اتصال کوتاه استفاده می کند. برخلاف and، با این حال، عملگر or به محض یافتن یک عملوند واقعی متوقف می شود. این را می توانید در مثال اول مشاهده کنید. از آنجا که 5 درست است، or بلافاصله 5 را بدون ارزیابی بقیه عبارت برمی گرداند.

 

 

# استفاده از اپراتور and پایتون در زمینه های بولی

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

 

+ شرط if

عبارات بولی معمولاً به عنوان شرط شناخته می شوند، زیرا معمولاً نیاز به برآورده کردن یک الزام معین را نشان می دهند. آنها در زمینه عبارات شرطی بسیار مفید هستند. در پایتون، این نوع عبارت با کلید واژه if شروع می شود و با یک شرط ادامه می یابد. عبارت شرطی می تواند شامل elif و else باشد.

ویدیو پیشنهادی: شرط if در پایتون

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

>>> a = -8

>>> if a < 0:
...     print("a is negative")
... elif a > 0:
...     print("a is positive")
... else:
...     print("a is equal to 0")
...
a is negative

 

از آنجا که a عدد منفی دارد ، شرط a <0 صادق است. بلوک کد if اجرا می شود و پیغام a منفی بر روی صفحه شما ظاهر می شود. اگر مقدار a را به عدد مثبت تغییر دهید ، بلاک elif اجرا می شود و پایتون a را مثبت چاپ می کند. در نهایت ، اگر a را روی صفر قرار دهید، بلاک کد else اجرا می شود. پیش بروید و با a بازی کنید تا ببینید چه اتفاقی می افتد!

 

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

# age.py

age = int(input("Enter your age: "))

if age >= 0 and age <= 9:
    print("You are a child!")
elif age > 9 and age <= 18:
    print("You are an adolescent!")
elif age > 18 and age <= 65:
    print("You are an adult!")
elif age > 65:
    print("Golden ages!")

 

در اینجا ، سن کاربر را با استفاده از input () دریافت می کنید و سپس آن را با int () به یک عدد صحیح تبدیل می کنید. علامت if بررسی می کند که آیا سن بزرگتر یا مساوی 0 است. در همان عبارت، بررسی می کند که آیا سن کمتر یا مساوی 9 است. برای انجام این کار ، یک عبارت بولی مرکب and ایجاد می کنید.

 

سه عبارت elif فواصل دیگر را برای تعیین مرحله زندگی مرتبط با سن کاربر بررسی می کنند.

 

اگر این اسکریپت را از خط فرمان خود اجرا کنید ، چیزی شبیه به این به دست می آید:

$ python age.py
Enter your age: 25
You are an adult!

 

+ حلقه while

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

ویدیو پیشنهادی: آموزش حلقه while در پایتون

فرض کنید شما در حال نمونه سازی یک سیستم کنترل برای تولید کننده هستید. این سیستم دارای یک مکانیسم مهم است که باید با فشار 500 psi یا کمتر کار کند. اگر فشار بیش از 500 psi باشد در حالی که زیر 700 psi بمانید، سیستم باید مجموعه ای از اقدامات ایمنی استاندارد را انجام دهد. برای فشارهای بیشتر از 700 psi ، مجموعه کاملاً جدیدی از اقدامات ایمنی وجود دارد که سیستم باید آنها را اجرا کند.

 

برای حل این مشکل، می توانید از حلقه while با یک عبارت and استفاده کنید. در اینجا اسکریپتی وجود دارد که راه حل احتمالی را شبیه سازی می کند:

# pressure.py


from time import sleep

from random import randint


def control_pressure():

    pressure = measure_pressure()

    while True:

        if pressure <= 500:

            break


        while pressure > 500 and pressure <= 700:

            run_standard_safeties()

            pressure = measure_pressure()


        while pressure > 700:

            run_critical_safeties()

            pressure = measure_pressure()


    print("Wow! The system is safe...")


def measure_pressure():

    pressure = randint(490, 800)

    print(f"psi={pressure}", end="; ")

    return pressure


def run_standard_safeties():

    print("Running standard safeties...")

    sleep(0.2)


def run_critical_safeties():

    print("Running critical safeties...")

    sleep(0.7)


if __name__ == "__main__":

    control_pressure()

 

در داخل control_pressure () ، یک حلقه نامحدود while روی خط 8 ایجاد می کنید، اگر سیستم پایدار باشد و فشار زیر 500 psi باشد ، عبارت شرطی از حلقه خارج می شود و برنامه تمام می شود.

 

در خط 12 ، اولین while داخلی اقدامات ایمنی استاندارد را اجرا می کند در حالی که فشار سیستم بین 500 psi و 700 psi باقی می ماند. در هر تکرار، حلقه اندازه گیری فشار جدیدی را دریافت می کند تا وضعیت را در تکرار بعدی دوباره آزمایش کند. اگر فشار فراتر از 700 psi باشد ، حلقه دوم در خط 16 اقدامات ایمنی مهم را انجام می دهد.

 

برای اجرای این اسکریپت ، خط فرمان خود را باز کرده و دستور زیر را وارد کنید:

$ python pressure.py
psi=756; Running critical safeties...
psi=574; Running standard safeties...
psi=723; Running critical safeties...
psi=552; Running standard safeties...
psi=500; Wow! The system is safe...

 

 

# استفاده از اپراتور and پایتون در زمینه های غیر بولی

این واقعیت که می تواند اشیاء را علاوه بر True و False بازگرداند، یک ویژگی جالب است. به عنوان مثال، این ویژگی به شما امکان می دهد از اپراتور and برای اجرای مشروط استفاده کنید. فرض کنید در صورتی که اولین آیتم در یک لیست معادل مقدار مورد انتظار باشد، باید یک متغیر flag را به روز کنید. برای این وضعیت، می توانید از یک شرط استفاده کنید:

>>> a_list = ["expected value", "other value"]
>>> flag = False

>>> if len(a_list) > 0 and a_list[0] == "expected value":
...     flag = True
...

>>> flag
True

 

در اینجا، شرطی بررسی می کند که آیا لیست حداقل یک آیتم دارد. در این صورت، بررسی می کند که آیا اولین آیتم در لیست برابر با رشته "expected value" است. اگر هر دو شرط رد شد، flag به True تغییر می کند. با استفاده از اپراتور and می توانید این کد را ساده کنید:

>>> a_list = ["expected value", "other value"]
>>> flag = False

>>> flag = len(a_list) > 0 and a_list[0] == "expected value"

>>> flag
True

 

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

 

کد مثال بالا مختصرتر از عبارت شرطی معادل است که قبلاً مشاهده کردید، اما کمتر خوانا است. برای درک درست این عبارت ، باید از نحوه عملکرد داخلی and آگاه باشید.

 

اگر مقاله بالا را دوست داشتید، پیشنهاد میکنیم به مطالب زیر هم سر بزنید:

معرفی 8 ابزار مهم پایتون برای ساخت api

جنگو در مقابل فلسک؟ کدامیک مناسب شماست؟

ویدیو آموزش کار با markdown در پایتون

ویدیو آموزش کارکردن با json در پایتون

مطالب مشابه



مونگارد