عملگرهای منطقی در پایتون؛ آموزش and، or و not
عملگرهای منطقی در پایتون
🐍 جلسه ۱۴ آموزش پایتون: عملگرهای منطقی و شرطهای تودرتو
عملگرهای منطقی در پایتون چگونه عمل می کند ؟ همراه با خبر ICT ادامه آموزش برنامه نویسی پایتون را می خوانیم
در جلسه قبل یاد گرفتیم چگونه با استفاده از دستورات شرطی در پایتون، مسیر اجرای برنامه را بر اساس شرایط مختلف تغییر دهیم.
با if، elif و else توانستیم به برنامه بگوییم:
اگر یک شرط درست بود، این کار را انجام بده؛ در غیر این صورت، کار دیگری انجام بده.
اما برنامههای واقعی معمولاً با یک شرط ساده کار نمیکنند.
برای مثال، فرض کنید میخواهیم ورود یک کاربر به یک سامانه را بررسی کنیم. کافی نیست فقط نام کاربری درست باشد؛ ممکن است لازم باشد نام کاربری درست باشد و رمز عبور نیز صحیح باشد.
یا مثلاً بخواهیم بگوییم:
اگر کاربر دانشآموز یا معلم بود، اجازه ورود به بخش آموزشی را بده.
اینجاست که عملگرهای منطقی در پایتون وارد میشوند.
در این جلسه با and، or و not آشنا میشویم و یاد میگیریم چگونه چند شرط را با یکدیگر ترکیب کنیم. سپس سراغ شرطهای تودرتو (Nested If) میرویم و تصمیمگیری چندمرحلهای را یاد میگیریم.
تحقیق و تدوین مهدی گمرکی
📌 مرور جلسه قبل
در جلسه ۱۳ با دستورات شرطی در پایتون آشنا شدیم.
یاد گرفتیم با استفاده از عملگرهای مقایسهای، دو مقدار را با یکدیگر مقایسه کنیم:
== != > < >= <=
برای مثال:
age = 20
if age >= 18:
print("ورود مجاز است.")
همچنین با else برای حالت جایگزین و با elif برای بررسی چند وضعیت آشنا شدیم:
score = 16
if score >= 17:
print("عالی")
elif score >= 14:
print("خوب")
elif score >= 10:
print("قابل قبول")
else:
print("مردود")
اما حالا میخواهیم چند شرط را با هم ترکیب کنیم.
🎯 هدف جلسه ۱۴
در پایان این جلسه باید بتوانید:
- مفهوم عملگرهای منطقی را توضیح دهید.
- از
andبرای ترکیب شرطها استفاده کنید. - از
orبرای بررسی چند حالت جایگزین استفاده کنید. - با
notنتیجه یک شرط را معکوس کنید. - چند شرط را در یک عبارت ترکیب کنید.
- شرطهای تودرتو با
ifایجاد کنید. - تفاوت شرط ترکیبی و شرط تودرتو را درک کنید.
- از شرطهای منطقی در برنامههای واقعی استفاده کنید.
- از خطاهای رایج در ترکیب شرطها جلوگیری کنید.
🧠 عملگرهای منطقی در پایتون چیستند؟
عملگرهای منطقی در پایتون (Logical Operators) برای ترکیب یا تغییر نتیجه شرطها استفاده میشوند.
سه عملگر منطقی اصلی در پایتون عبارتاند از:
| عملگر | معنی | کاربرد |
|---|---|---|
and |
و | همه شرطهای موردنظر باید درست باشند |
or |
یا | حداقل یکی از شرطها باید درست باشد |
not |
نقیض | نتیجه یک شرط را معکوس میکند |
این عملگرها معمولاً در کنار مقادیر بولی (True و False) و عبارتهای مقایسهای استفاده میشوند.
🔗 عملگر and در پایتون
عملگر and زمانی نتیجه True تولید میکند که هر دو طرف آن درست باشند.
مثلاً:
age = 20
has_id = True
if age >= 18 and has_id:
print("اجازه ورود صادر شد.")
در اینجا دو شرط داریم:
age >= 18
has_id
هر دو باید درست باشند تا شرط کلی برقرار شود.
چون:
20 >= 18 → True
has_id → True
پس:
True and True → True
و پیام نمایش داده میشود.
📊 جدول منطقی and
برای درک بهتر، جدول زیر را ببینید:
| شرط اول | شرط دوم | نتیجه and |
True |
True |
True |
True |
False |
False |
False |
True |
False |
False |
False |
False |
پس قانون ساده and این است:
برای درست شدن
and، همه شرطهای موردنظر باید درست باشند.
🎯 مثال کاربردی and
فرض کنید یک فروشگاه اینترنتی برای خرید یک محصول، دو شرط دارد:
- کاربر باید حداقل ۱۸ سال داشته باشد.
- کاربر باید حساب کاربری تأییدشده داشته باشد.
age = 22
is_verified = True
if age >= 18 and is_verified:
print("امکان خرید برای شما فعال است.")
else:
print("شرایط خرید را ندارید.")
در اینجا هر دو شرط باید برقرار باشند.
🔀 عملگر or در پایتون
عملگر or زمانی True میشود که حداقل یکی از شرطها درست باشد.
مثلاً:
is_student = False
is_teacher = True
if is_student or is_teacher:
print("دسترسی آموزشی فعال است.")
شرط اول:
is_student → False
شرط دوم:
is_teacher → True
بنابراین:
False or True → True
در نتیجه پیام چاپ میشود.
📊 جدول منطقی or
| شرط اول | شرط دوم | نتیجه or |
True |
True |
True |
True |
False |
True |
False |
True |
True |
False |
False |
False |
قانون ساده:
در
orکافی است حداقل یکی از شرطها درست باشد.
🎯 مثال کاربردی or
فرض کنید میخواهیم به کاربرانی که عضو «دانشجویان» یا «مدرسان» هستند دسترسی بدهیم:
is_student = False
is_teacher = True
if is_student or is_teacher:
print("به بخش آموزشی خوش آمدید.")
else:
print("شما دسترسی آموزشی ندارید.")
🔄 عملگر not در پایتون
عملگر not نتیجه یک عبارت منطقی را معکوس میکند.
یعنی:
not True → False
not False → True
مثال:
is_logged_in = False
if not is_logged_in:
print("لطفاً وارد حساب کاربری خود شوید.")
چون:
is_logged_in = False
پس:
not False = True
و پیام نمایش داده میشود.
📊 جدول منطقی not
| مقدار | نتیجه not |
True |
False |
False |
True |
🧩 مثال واقعی از not
فرض کنید یک متغیر مشخص میکند کاربر وارد حساب خود شده یا نه:
is_logged_in = False
if not is_logged_in:
print("شما وارد حساب نشدهاید.")
این روش زمانی بسیار کاربردی است که بخواهیم بررسی کنیم یک وضعیت برقرار نیست.
🧠 ترکیب چند عملگر منطقی
میتوانیم and، or و not را در یک شرط نیز استفاده کنیم.
مثلاً:
age = 25
is_student = True
has_ticket = True
if age >= 18 and (is_student or has_ticket):
print("ورود مجاز است.")
اینجا ابتدا عبارت داخل پرانتز بررسی میشود:
is_student or has_ticket
چون حداقل یکی از آنها درست است، نتیجه True خواهد بود.
سپس:
age >= 18
نیز درست است.
بنابراین شرط نهایی برقرار میشود.
نکته مهم درباره پرانتز
وقتی شرطها پیچیده میشوند، استفاده از پرانتز میتواند خوانایی و درک کد را بسیار بهتر کند.
به جای:
if age >= 18 and is_student or has_ticket:
بهتر است در موارد پیچیده بنویسیم:
if age >= 18 and (is_student or has_ticket):
این کار قصد برنامهنویس را واضحتر میکند.
⚙️ ترتیب ارزیابی عملگرهای منطقی
وقتی چند عملگر منطقی در یک عبارت وجود داشته باشند، ترتیب ارزیابی اهمیت پیدا میکند.
به طور کلی در چنین عبارتهایی، not اولویت بالاتری از and دارد و and نیز نسبت به or اولویت بالاتری دارد.
یعنی:
not
↓
and
↓
or
برای مثال:
a = True
b = False
c = False
result = a or b and c
print(result)
در اینجا and قبل از or ارزیابی میشود.
برای جلوگیری از ابهام، مخصوصاً در کدهای آموزشی و پروژههای بزرگ، استفاده از پرانتز معمولاً انتخاب بهتری است:
result = a or (b and c)
⚡ یک نکته مهم: Python ممکن است همه شرطها را بررسی نکند
پایتون برای and و or از مفهومی به نام Short-Circuit Evaluation استفاده میکند.
یعنی در بعضی شرایط، وقتی نتیجه از قبل مشخص شده باشد، پایتون ادامه عبارت را بررسی نمیکند.
مثلاً:
age = 15
if age >= 18 and has_ticket:
print("ورود مجاز")
چون:
age >= 18
از همان ابتدا False است، نتیجه and دیگر نمیتواند True شود؛ بنابراین پایتون ممکن است قسمت دوم را اصلاً ارزیابی نکند.
برای برنامهنویسان مبتدی، فعلاً کافی است بدانید:
پایتون در بسیاری از عبارتهای منطقی، برای جلوگیری از محاسبات غیرضروری از ارزیابی کوتاهمدار استفاده میکند.
این موضوع در آینده، هنگام کار با توابع و شرطهای پیچیدهتر اهمیت بیشتری پیدا خواهد کرد.
🏗️ شرطهای تودرتو در پایتون چیستند؟
گاهی اوقات یک تصمیم باید بعد از تصمیم دیگری گرفته شود.
در چنین شرایطی میتوانیم یک if را داخل if دیگری قرار دهیم.
به این ساختار شرط تودرتو (Nested If) گفته میشود.
ساختار ساده:
if condition1:
if condition2:
print("هر دو شرط برقرار هستند.")
یعنی:
- ابتدا شرط اول بررسی میشود.
- اگر شرط اول درست بود، وارد شرط دوم میشویم.
- سپس شرط دوم بررسی میشود.
🎯 مثال ساده شرط تودرتو
فرض کنید میخواهیم ورود یک کاربر را بررسی کنیم.
ابتدا بررسی میکنیم آیا کاربر وارد حساب شده است یا خیر.
اگر وارد شده بود، بررسی میکنیم آیا حساب او فعال است یا نه.
is_logged_in = True
is_active = True
if is_logged_in:
if is_active:
print("خوش آمدید!")
else:
print("حساب شما غیرفعال است.")
else:
print("لطفاً ابتدا وارد حساب خود شوید.")
در اینجا شرط دوم فقط زمانی بررسی میشود که شرط اول برقرار باشد.
🛒 مثال کاربردیتر: بررسی خرید اینترنتی
فرض کنید فروشگاه میخواهد بررسی کند:
۱. آیا کاربر وارد حساب شده است؟
۲. اگر وارد شده، آیا موجودی کافی دارد؟
is_logged_in = True
balance = 500
if is_logged_in:
if balance >= 300:
print("خرید با موفقیت انجام شد.")
else:
print("موجودی شما کافی نیست.")
else:
print("ابتدا وارد حساب کاربری شوید.")
این یک نمونه واقعی از تصمیمگیری چندمرحلهای است.
🔄 شرط تودرتو یا شرط ترکیبی؟
ممکن است بپرسید آیا همیشه باید از Nested If استفاده کنیم؟
خیر.
گاهی میتوانیم همان منطق را با and سادهتر بنویسیم.
مثلاً:
if is_logged_in and balance >= 300:
print("خرید با موفقیت انجام شد.")
هر دو روش میتوانند درست باشند، اما کاربردشان همیشه یکسان نیست.
شرط ترکیبی
وقتی فقط میخواهیم چند شرط را با هم بررسی کنیم، معمولاً ترکیب شرطها خواناتر است:
if is_logged_in and balance >= 300:
print("خرید مجاز است.")
شرط تودرتو
وقتی برای هر مرحله رفتار متفاوتی داریم، شرط تودرتو میتواند مناسبتر باشد:
if is_logged_in:
if balance >= 300:
print("خرید انجام شد.")
else:
print("موجودی کافی نیست.")
else:
print("ابتدا وارد شوید.")
بنابراین انتخاب بین این دو به منطق مسئله و خوانایی کد بستگی دارد.
⚠️ زیادهروی در شرطهای تودرتو
شرطهای تودرتو بسیار کاربردی هستند، اما نباید بدون دلیل از آنها استفاده کنیم.
کدی مثل این:
if condition1:
if condition2:
if condition3:
if condition4:
print("...")
خیلی سریع میتواند خوانایی برنامه را کاهش دهد.
در چنین شرایطی گاهی میتوان منطق را سادهتر کرد:
if condition1 and condition2 and condition3 and condition4:
print("...")
البته اگر هر مرحله رفتار متفاوتی داشته باشد، ساختار تودرتو ممکن است همچنان انتخاب مناسبتری باشد.
🧪 تمرینهای جلسه ۱۴
حالا نوبت شماست که با عملگرهای منطقی در پایتون تمرین کنید.
تمرین ۱: عدد در محدوده و زوج است
برنامهای بنویسید که یک عدد از کاربر دریافت کند و بررسی کند:
- آیا عدد بین ۱۰ و ۲۰ است؟
- آیا عدد زوج است؟
اگر هر دو شرط درست بودند، پیام زیر نمایش داده شود:
عدد در محدوده مجاز و زوج است.
راهنمایی:
num >= 10
num <= 20
num % 2 == 0
یک راهحل:
num = int(input("یک عدد وارد کنید: "))
if num >= 10 and num <= 20 and num % 2 == 0:
print("عدد در محدوده مجاز و زوج است.")
else:
print("شرایط برقرار نیست.")
تمرین ۲: استفاده از or
برنامهای بنویسید که مشخص کند آیا کاربر اجازه ورود به یک بخش آموزشی را دارد یا خیر.
شرایط:
- دانشجو باشد، یا
- مدرس باشد.
is_student = input("آیا دانشجو هستید؟ ") == "بله"
is_teacher = input("آیا مدرس هستید؟ ") == "بله"
if is_student or is_teacher:
print("دسترسی مجاز است.")
else:
print("دسترسی غیرمجاز است.")
تمرین ۳: استفاده از not
برنامهای بنویسید که بررسی کند آیا کاربر وارد حساب خود نشده است.
is_logged_in = False
if not is_logged_in:
print("لطفاً وارد حساب خود شوید.")
تمرین ۴: شرط تودرتو
برنامهای بنویسید که ابتدا بررسی کند کاربر وارد حساب شده است.
اگر وارد شده بود، موجودی حساب او را بررسی کند.
اگر موجودی حداقل ۱۰۰ واحد بود:
خرید امکانپذیر است.
در غیر این صورت:
موجودی کافی نیست.
اگر کاربر وارد حساب نشده بود:
ابتدا وارد حساب شوید.
🧠 چالش جلسه
یک برنامه کوچک برای بررسی شرایط ورود به یک رویداد بنویسید.
شرایط:
- سن باید حداقل ۱۸ سال باشد.
- کاربر باید بلیت داشته باشد.
- اگر کاربر بلیت ویژه داشته باشد، حتی با شرایط متفاوتی بتواند وارد بخش VIP شود.
سعی کنید ابتدا راهحل را با and و or بنویسید و سپس بخشی از آن را با شرط تودرتو پیادهسازی کنید.
⚠️ خطاهای رایج در استفاده از عملگرهای منطقی
۱. اشتباه در استفاده از and و or
این دو را با هم اشتباه نگیرید.
if is_student and is_teacher:
یعنی هر دو شرط باید درست باشند.
اما:
if is_student or is_teacher:
یعنی حداقل یکی از آنها باید درست باشد.
۲. نوشتن شرطهای نادرست با or
مثلاً اگر میخواهیم عدد بین ۱۰ و ۲۰ باشد، نوشتن این کد اشتباه منطقی است:
if num >= 10 or num <= 20:
print("در محدوده است.")
تقریباً بسیاری از اعداد یکی از این دو شرط را برقرار میکنند.
شرط صحیح:
if num >= 10 and num <= 20:
print("در محدوده است.")
یا شکل خواناتر:
if 10 <= num <= 20:
print("در محدوده است.")
پایتون از چنین مقایسه زنجیرهای (Chained Comparison) پشتیبانی میکند.
۳. فراموش کردن پرانتز در شرطهای پیچیده
اگر یک شرط پیچیده است، برای خوانایی از پرانتز استفاده کنید:
if age >= 18 and (is_student or is_teacher):
print("دسترسی مجاز است.")
۴. ایجاد شرطهای بیش از حد تو در تو
اگر تعداد زیادی if داخل یکدیگر قرار گرفتهاند، قبل از ادامه کار بررسی کنید آیا میتوان منطق را با and، or یا ساختار سادهتری نوشت.
📚 جمعبندی جلسه ۱۴
در این جلسه با عملگرهای منطقی در پایتون آشنا شدیم.
یاد گرفتیم:
| مفهوم | کاربرد |
and |
همه شرطهای موردنظر باید درست باشند |
or |
حداقل یکی از شرطها باید درست باشد |
not |
نتیجه یک شرط را معکوس میکند |
Nested If |
اجرای یک شرط داخل شرط دیگر |
Short-Circuit |
توقف ارزیابی وقتی نتیجه از قبل مشخص شده است |
Chained Comparison |
نوشتن مقایسههایی مانند 10 <= x <= 20 |
مهمترین نکته این جلسه این است که:
عملگرهای منطقی به برنامه اجازه میدهند چند شرط را با یکدیگر ترکیب کند و شرطهای تودرتو نیز امکان تصمیمگیری چندمرحلهای را فراهم میکنند.
تا اینجا برنامههای ما میتوانند بر اساس یک یا چند شرط تصمیم بگیرند.
اما هنوز یک مشکل مهم داریم:
اگر بخواهیم یک کار را بارها و بارها انجام دهیم، آیا باید همان کد را چندین بار بنویسیم؟
قطعاً نه! 🚀
🔜 جلسه ۱۵: ورود به دنیای حلقهها در پایتون
در جلسه بعد وارد یکی از مهمترین مفاهیم برنامهنویسی میشویم:
🔁 حلقهها (Loops)
با حلقهها یاد میگیریم چگونه یک بخش از کد را چندین بار اجرا کنیم.
در جلسه بعد با مفاهیم زیر آشنا خواهیم شد:
while- شرط ادامه حلقه
- حلقههای بینهایت
breakcontinue- کنترل تعداد تکرارها
مثلاً به جای اینکه ده بار بنویسیم:
print("سلام")
میتوانیم با یک حلقه کاری کنیم که پایتون این دستور را چندین بار برای ما اجرا کند.
از جلسه بعد، برنامههای ما فقط تصمیم نمیگیرند؛ بلکه میتوانند بارها و بارها عمل کنند. 🚀
❓ سوالات متداول درباره عملگرهای منطقی در پایتون
عملگرهای منطقی در پایتون چیستند؟
سه عملگر منطقی اصلی پایتون and، or و not هستند که برای ترکیب یا معکوس کردن شرطها استفاده میشوند.
تفاوت and و or در پایتون چیست؟
در and همه شرطهای موردنظر باید درست باشند، اما در or کافی است حداقل یکی از شرطها درست باشد.
عملگر not در پایتون چه کاری انجام میدهد؟
not نتیجه منطقی یک عبارت را معکوس میکند؛ یعنی True را به False و False را به True تبدیل میکند.
شرط تودرتو در پایتون چیست؟
وقتی یک دستور if را داخل یک دستور if دیگر قرار میدهیم، یک شرط تودرتو یا Nested If ایجاد کردهایم.
آیا همیشه باید از شرط تودرتو استفاده کنیم؟
خیر. اگر هدف فقط ترکیب چند شرط باشد، استفاده از and و or معمولاً سادهتر و خواناتر است. شرط تودرتو زمانی مفید است که تصمیمگیری چندمرحلهای داشته باشیم یا برای هر مرحله رفتار متفاوتی تعریف کنیم.
آیا میتوان چند شرط را با and و or ترکیب کرد؟
بله. برای مثال:
if age >= 18 and (is_student or is_teacher):
print("دسترسی مجاز است.")
در شرطهای پیچیده، استفاده از پرانتز به خوانایی و جلوگیری از خطا کمک میکند.
🎯 نتیجه نهایی
در جلسه ۱۴ یک قدم مهم دیگر در مسیر یادگیری پایتون برداشتیم.
اکنون میتوانیم:
مقایسه کنیم → شرط بسازیم → چند شرط را ترکیب کنیم → تصمیم چندمرحلهای بگیریم.
این یعنی برنامههای ما هر روز به برنامههای واقعی نزدیکتر میشوند.
در جلسه بعد، با حلقهها در پایتون یاد میگیریم چگونه همین تصمیمگیریها را در فرآیندهای تکرارشونده به کار بگیریم.
📚 جلسه ۱۵: حلقه while و کنترل تکرار در پایتون 🚀
تحقیق و تدوین مهدی گمرکی
