Table of Contents
آشنایی با عملگرهای منطقی در پایتون
در فصل شرطها، یاد گرفتهاید که با if و عملگرهای مقایسهای (مثل ==، >، < و …) کار کنید. عملگرهای منطقی (Logical Operators) کمک میکنند چند شرط را با هم ترکیب کنید و تصمیمهای پیچیدهتری بگیرید.
در پایتون سه عملگر منطقی اصلی داریم:
andornot
در این فصل تمرکز ما روی این سه عملگر و نحوهٔ کار آنها در شرطها است.
عملگر `and` (و)
and زمانی نتیجهٔ True میدهد که هر دو شرط True باشند. اگر حتی یکی از شرطها False باشد، نتیجه False میشود.
ساختار کلی:
شرط1 and شرط2مثال ساده:
age = 20
has_id = True
if age >= 18 and has_id == True:
print("میتوانید وارد شوید.")در این مثال:
- شرط اول:
age >= 18→ درست (True) - شرط دوم:
has_id == True→ درست (True) - نتیجه:
True and True→True→ دستور داخلifاجرا میشود.
مثال دیگر که یکی از شرطها برقرار نیست:
age = 16
has_id = True
if age >= 18 and has_id == True:
print("میتوانید وارد شوید.")
else:
print("اجازهٔ ورود ندارید.")اینجا:
- شرط اول:
age >= 18→ نادرست (False) - شرط دوم:
has_id == True→ درست (True) - نتیجه:
False and True→False
جدول حقیقت `and`
برای خلاصهکردن رفتار and:
| شرط۱ | شرط۲ | نتیجهٔ شرط1 and شرط2 |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
عملگر `or` (یا)
or زمانی نتیجهٔ True میدهد که حداقل یکی از شرطها True باشد. فقط وقتی هر دو شرط False باشند، نتیجه False میشود.
ساختار کلی:
شرط1 or شرط2مثال:
is_student = True
has_discount_code = False
if is_student or has_discount_code:
print("شما شامل تخفیف میشوید.")
else:
print("تخفیفی شامل شما نمیشود.")در این مثال:
- شرط اول:
is_student→True - شرط دوم:
has_discount_code→False - نتیجه:
True or False→True→ پیام تخفیف نمایش داده میشود.
مثال که هر دو شرط برقرار نیستند:
is_student = False
has_discount_code = False
if is_student or has_discount_code:
print("شما شامل تخفیف میشوید.")
else:
print("تخفیفی شامل شما نمیشود.")اینجا:
False or False→False
جدول حقیقت `or`
| شرط۱ | شرط۲ | نتیجهٔ شرط1 or شرط2 |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
عملگر `not` (نقیض / برعکسکننده)
not روی یک مقدار بولی کار میکند و آن را برعکس میکند:
not True→Falsenot False→True
ساختار کلی:
not شرطمثال:
is_raining = False
if not is_raining:
print("میتوانیم بیرون برویم.")
else:
print("هوا بارانی است، بهتر است بمانیم.")اینجا:
is_rainingبرابرFalsenot is_rainingبرابرTrue→ شرط برقرار است.
مثال دیگر:
logged_in = True
if not logged_in:
print("لطفاً ابتدا وارد شوید.")
else:
print("خوش آمدید!")
چون logged_in برابر True است، not logged_in برابر False میشود و بخش else اجرا میشود.
ترکیب چند عملگر منطقی
میتوانید چندین شرط را با هم ترکیب کنید. در این حالت، ترتیب اجرای عملگرها مهم است.
ترتیب اولویت (بدون پرانتز):
notandor
برای خواناتر شدن کد و جلوگیری از اشتباه، استفاده از پرانتز پیشنهاد میشود.
مثال:
age = 25
is_student = False
has_ticket = True
if (age >= 18 and has_ticket) or is_student:
print("میتوانید وارد سینما شوید.")
else:
print("اجازهٔ ورود ندارید.")تجزیهٔ شرط:
(age >= 18 and has_ticket)age >= 18→Truehas_ticket→True- نتیجه:
True and True→True - حالا:
True or is_student is_student→FalseTrue or False→True
→ شرط کلیTrueمیشود.
اگر پرانتز را برداریم هم در این مثال نتیجه همان است، ولی در شرایط پیچیده، نبود پرانتز میتواند باعث سوءتفاهم شود.
مثال: استفادهٔ همزمان از `and` و `or`
age = 17
parent_permission = True
has_ticket = True
if (age >= 18 and has_ticket) or (age < 18 and has_ticket and parent_permission):
print("میتوانید وارد سینما شوید.")
else:
print("اجازهٔ ورود ندارید.")خواندن شرط به زبان ساده:
- اگر بالای ۱۸ سال هستی و بلیت داری، یا
- اگر زیر ۱۸ سال هستی، بلیت داری و اجازهٔ والدین هم داری
→ میتوانی وارد شوی.
چند اشتباه رایج با عملگرهای منطقی
۱. اشتباه گرفتن `and` و `or`
مثال اشتباه:
age = 20
# هدف: اگر سن بین 18 و 30 است
if age >= 18 or age <= 30:
print("سن شما بین ۱۸ و ۳۰ است.")
این شرط تقریباً همیشه True است، چون:
- اگر
ageبزرگتر مساوی ۱۸ باشد → شرط اولTrue - اگر
ageکوچکتر مساوی ۳۰ باشد → شرط دومTrue
برای «بین ۱۸ و ۳۰ بودن» باید از and استفاده کنید:
if age >= 18 and age <= 30:
print("سن شما بین ۱۸ و ۳۰ است.")یا به شکل کوتاهتر (که در فصل عملگرهای مقایسهای دیدهاید):
if 18 <= age <= 30:
print("سن شما بین ۱۸ و ۳۰ است.")۲. مقایسهٔ بولیها با `==` وقتی لازم نیست
این دو از نظر نتیجه یکساناند:
if is_student == True:
...
if is_student:
...کد دوم رایجتر و خواناتر است. مشابه همین:
if is_student == False: # کمتر خوانا
...
if not is_student: # خواناتر
...چند تمرین پیشنهادی
(خودتان سعی کنید اینها را در محیط پایتون پیادهسازی کنید.)
- برنامهای بنویسید که:
- سن کاربر را بگیرد
- اگر سن بین ۱۳ و ۱۹ بود، پیام «شما نوجوان هستید.» را چاپ کند.
- از عملگر
andاستفاده کنید. - برنامهای بنویسید که:
- از کاربر بپرسد دانشجو است (
yes/no) - از او بپرسد کد تخفیف دارد یا نه (
yes/no) - اگر یکی از آن دو
yesبود، بنویسد «شما شامل تخفیف میشوید.»
(ازorاستفاده کنید.) - متغیری به نام
is_nightتعریف کنید (TrueیاFalse). - اگر شب نیست (
not is_night) پیام «روشنایی روز» را چاپ کنید. - اگر شب است و کاربر هم خسته است (
is_tired == True) پیام «بهتر است بخوابید.» را چاپ کنید. از ترکیبandوnotاستفاده کنید.
در فصلهای بعدی، از همین عملگرهای منطقی در شرطها و حلقهها بارها استفاده خواهید کرد؛ بنابراین چند بار با آنها تمرین کنید تا برایتان کاملاً طبیعی شوند.