Table of Contents
ساختار شرطی if، elif، else در پایتون
در این بخش روی خودِ ساختارهای if، elif و else تمرکز میکنیم و با الگوهای مختلف نوشتن آنها آشنا میشویم. فرض میکنیم با مفهوم کلی «شرط» و عملگرهای مقایسهای و منطقی آشنا شدهاید.
شکل کلی if
سادهترین ساختار شرطی:
age = 20
if age >= 18:
print("شما بزرگسال هستید.")
نکتههای مهم در if:
- بعد از
ifحتماً باید شرط بیاید. - بعد از شرط، دونقطه
:لازم است. - تمام دستورهایی که «وابسته به شرط» هستند باید با تورفتگی (مثلاً ۴ فاصله) نوشته شوند.
اگر شرط True باشد، بلوک داخل if اجرا میشود؛ اگر False باشد، نوبت سراغ دستور بعد از بلوک if میرسد.
اضافه کردن else: شرط دو حالته
وقتی میخواهید بگویید «اگر این بود، فلان؛ وگرنه، بهمان»، از else استفاده میکنید:
age = 15
if age >= 18:
print("اجازه ورود دارید.")
else:
print("اجازه ورود ندارید.")
ویژگیهای else:
- خودش شرط ندارد.
- همیشه همراه با یک
ifمیآید. - وقتی اجرا میشود که شرط
if(و هیچelifای قبل از آن) برقرار نباشد.
الگوی کلی:
if condition:
# اگر شرط برقرار بود
...
else:
# در غیر این صورت
...استفاده از elif برای چند حالت
وقتی بیش از دو وضعیت ممکن دارید، استفاده از چند if پشتسرهم معمولاً غلط است، چون همهٔ آنها جداگانه بررسی میشوند. در اینجا از elif استفاده میکنیم که به معنی «در غیر این صورت، اگر...» است.
مثال: دستهبندی نمرهٔ دانشآموز
score = 73
if score >= 90:
print("عالی")
elif score >= 75:
print("خیلی خوب")
elif score >= 60:
print("خوب")
else:
print("نیاز به تلاش بیشتر")در این زنجیره:
- ابتدا شرط
ifبررسی میشود. - اگر برقرار نبود، شرط
elifاول چک میشود. - اگر آن هم نبود،
elifبعدی چک میشود. - اگر هیچکدام برقرار نشد،
elseاجرا میشود.
نکته مهم: بهمحض اینکه یکی از شرطها True شود، بقیهٔ شرطها دیگر بررسی نمیشوند.
مثلاً در مثال بالا اگر score = 80 باشد:
score >= 90→ نادرستscore >= 75→ درست →"خیلی خوب"چاپ میشود، و دیگر سراغ شرایط بعدی نمیرود، حتی اگر بعضی از آنها هم میتوانستند درست باشند.
چند نکتهٔ مهم دربارهٔ elif
- میتوانید هر تعداد
elifکه خواستید بینifوelseداشته باشید. - میتوانید کلاً
elseنداشته باشید و تنها ازif+ چندelifاستفاده کنید. - نمیتوانید یک
elifیاelseبدونifداشته باشید؛ همیشه باید باifشروع شود.
مثال بدون else:
temperature = 25
if temperature >= 30:
print("هوا گرم است.")
elif temperature >= 20:
print("هوا معتدل است.")
elif temperature >= 10:
print("هوا کمی خنک است.")
# هیچ پیام پیشفرضی برای دماهای پایینتر تعریف نشدهترتیب شرطها چرا مهم است؟
چون زنجیرهٔ if / elif / else از بالا به پایین بررسی میشود، ترتیب نوشتن شرطها نتیجه را تغییر میدهد.
فرض کنید:
score = 95
if score >= 60:
print("قبول")
elif score >= 90:
print("عالی")
خروجی: قبول
چرا؟ چون:
- شرط اول (
score >= 60) برای ۹۵ درست است؛ پس همان اولی اجرا میشود. - دیگر سراغ
elif score >= 90نمیرود.
نسخهٔ درستتر:
score = 95
if score >= 90:
print("عالی")
elif score >= 60:
print("قبول")
else:
print("مردود")
قاعدهٔ کلی:
وقتی محدودهها روی هم میافتند، شرطهای خاصتر / سختتر را بالاتر بنویسید و شرطهای کلیتر را پایینتر.
استفاده از چند if جدا از هم
گاهی اوقات میخواهید چند شرط کاملاً مستقل از هم بررسی شوند. در این حالت نباید از elif استفاده کنید، بلکه چند if جدا مینویسید.
age = 20
if age >= 18:
print("بزرگسال")
if age >= 13:
print("نوجوان یا بزرگسال")
هر دو if بهطور جداگانه بررسی میشوند، بنابراین ممکن است هر دو پیام چاپ شوند.
در مقابل:
age = 20
if age >= 18:
print("بزرگسال")
elif age >= 13:
print("نوجوان")
در اینجا فقط "بزرگسال" چاپ میشود؛ چون وقتی شرط اول برقرار شد، دیگر نوبت به elif نمیرسد.
خلاصه:
- وقتی میخواهید «فقط یکی» از چند حالت اجرا شود → از
if / elif / elseاستفاده کنید. - وقتی میخواهید «ممکن است چند تا» همزمان اجرا شوند → چند
ifمستقل بنویسید.
ترکیب if، elif، else با ورودی کاربر
یک مثال کمی کاملتر برای دستهبندی عدد واردشده توسط کاربر:
number = int(input("یک عدد بزنید: "))
if number > 0:
print("عدد مثبت است.")
elif number == 0:
print("عدد صفر است.")
else:
print("عدد منفی است.")در این برنامه:
- اگر شرط اول (
number > 0) برقرار نباشد، سراغelif number == 0میرود. - اگر آن هم برقرار نباشد، یعنی عدد قطعاً منفی است، پس
elseاجرا میشود.
if تو در تو در مقابل elif
شما میتوانید داخل یک if، یک if دیگر هم بنویسید (شرطهای تو در تو)، اما گاهی بهتر است بهجای تو در تو کردن، از elif استفاده کنید تا کد خواناتر بماند.
مثال با if تو در تو:
age = 25
has_id = True
if age >= 18:
if has_id:
print("اجازه ورود دارید.")
else:
print("مدرک شناسایی لازم است.")
else:
print("کمتر از ۱۸ سال مجاز نیست.")
نسخهٔ معادل با ترکیب if / elif / else (و عملگر منطقی):
age = 25
has_id = True
if age < 18:
print("کمتر از ۱۸ سال مجاز نیست.")
elif age >= 18 and has_id:
print("اجازه ورود دارید.")
else:
print("مدرک شناسایی لازم است.")
هدف این بخش نشان دادن این است که if / elif / else میتوانند جایگزین بعضی از شرطهای تو در تو شوند و خوانایی را بهتر کنند؛ جزئیات خودِ شرطهای تو در تو در بخش مخصوص خودشان بیشتر بررسی میشود.
الگوهای متداول if، elif، else
۱. دستهبندی بازهای (مثلاً نمره، دما، سن)
score = 48
if score >= 90:
level = "عالی"
elif score >= 75:
level = "خیلی خوب"
elif score >= 50:
level = "قبول"
else:
level = "مردود"
print("سطح شما:", level)۲. انتخاب از بین چند گزینهٔ متنی
command = input("دستور (start/stop/pause): ")
if command == "start":
print("برنامه شروع شد.")
elif command == "stop":
print("برنامه متوقف شد.")
elif command == "pause":
print("برنامه موقتاً متوقف شد.")
else:
print("دستور نامعتبر است.")۳. حالت پیشفرض با else
وقتی چند حالت خاص را بررسی کردید، میتوانید همهٔ بقیهٔ حالتها را با else پوشش دهید.
color = input("رنگ چراغ راهنما (red/yellow/green): ")
if color == "red":
print("بایست.")
elif color == "yellow":
print("آماده باش.")
elif color == "green":
print("حرکت کن.")
else:
print("رنگ نامعتبر.")
اینجا else نقش «حالت پیشفرض» را دارد؛ هر چیزی غیر از سه رنگ اصلی به آن میافتد.
خطاهای رایج در نوشتن if، elif، else (از نظر نحو)
برخی اشتباههای متداول هنگام کار با این ساختار:
۱. فراموش کردن دونقطه
# غلط
if age >= 18
print("OK")باید اینطور باشد:
if age >= 18:
print("OK")
همین دربارهٔ elif و else هم صدق میکند.
۲. نداشتن تورفتگی درست
# غلط
if age >= 18:
print("OK")نسخهٔ درست:
if age >= 18:
print("OK")۳. نوشتن شرط کنار else
# غلط
else age < 18:
print("مجاز نیستید")
else هیچ شرطی نمیگیرد. اگر میخواهید شرط بگذارید، باید elif استفاده کنید:
elif age < 18:
print("مجاز نیستید")یا:
if age >= 18:
print("مجاز هستید")
else:
print("مجاز نیستید")تمرین ذهنی
برای تسلط بیشتر، سعی کنید برای این سناریوها با استفاده از if / elif / else راهحل بنویسید (کد را میتوانید بعداً در بخش تمرینها پیادهسازی کنید):
- برنامهای بنویسید که عدد ورودی را به این صورت دستهبندی کند:
- بزرگتر از ۱۰۰ → «خیلی بزرگ»
- بین ۱۰ تا ۱۰۰ (شامل ۱۰ و ۱۰۰) → «معمولی»
- کمتر از ۱۰ → «کوچک»
- برنامهای که بر اساس ساعت (عدد ۰ تا ۲۳) چاپ کند:
- ۵ تا ۱۲ → «صبح بخیر»
- ۱۲ تا ۱۸ → «ظهر/عصر بخیر»
- ۱۸ تا ۲۳ → «شب بخیر»
- غیر از اینها → «وقت نامعتبر»
در هر دو تمرین، دقت کنید شرطها را با ترتیبی بنویسید که روی هم نیفتند یا اگر میافتند، حالتهای خاصتر بالاتر باشند.