Kahibaro
Discord Login Register

if، elif، else

ساختار شرطی if، elif، else در پایتون

در این بخش روی خودِ ساختارهای if، elif و else تمرکز می‌کنیم و با الگوهای مختلف نوشتن آن‌ها آشنا می‌شویم. فرض می‌کنیم با مفهوم کلی «شرط» و عملگرهای مقایسه‌ای و منطقی آشنا شده‌اید.

شکل کلی if

ساده‌ترین ساختار شرطی:

age = 20
if age >= 18:
    print("شما بزرگسال هستید.")

نکته‌های مهم در if:

اگر شرط True باشد، بلوک داخل if اجرا می‌شود؛ اگر False باشد، نوبت سراغ دستور بعد از بلوک if می‌رسد.

اضافه کردن else: شرط دو حالته

وقتی می‌خواهید بگویید «اگر این بود، فلان؛ وگرنه، بهمان»، از else استفاده می‌کنید:

age = 15
if age >= 18:
    print("اجازه ورود دارید.")
else:
    print("اجازه ورود ندارید.")

ویژگی‌های else:

الگوی کلی:

if condition:
    # اگر شرط برقرار بود
    ...
else:
    # در غیر این صورت
    ...

استفاده از elif برای چند حالت

وقتی بیش از دو وضعیت ممکن دارید، استفاده از چند if پشت‌سرهم معمولاً غلط است، چون همهٔ آن‌ها جداگانه بررسی می‌شوند. در این‌جا از elif استفاده می‌کنیم که به معنی «در غیر این صورت، اگر...» است.

مثال: دسته‌بندی نمرهٔ دانش‌آموز

score = 73
if score >= 90:
    print("عالی")
elif score >= 75:
    print("خیلی خوب")
elif score >= 60:
    print("خوب")
else:
    print("نیاز به تلاش بیشتر")

در این زنجیره:

  1. ابتدا شرط if بررسی می‌شود.
  2. اگر برقرار نبود، شرط elif اول چک می‌شود.
  3. اگر آن هم نبود، elif بعدی چک می‌شود.
  4. اگر هیچ‌کدام برقرار نشد، else اجرا می‌شود.

نکته مهم: به‌محض این‌که یکی از شرط‌ها True شود، بقیهٔ شرط‌ها دیگر بررسی نمی‌شوند.

مثلاً در مثال بالا اگر score = 80 باشد:

چند نکتهٔ مهم دربارهٔ elif

مثال بدون 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 = 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 با ورودی کاربر

یک مثال کمی کامل‌تر برای دسته‌بندی عدد واردشده توسط کاربر:

number = int(input("یک عدد بزنید: "))
if number > 0:
    print("عدد مثبت است.")
elif number == 0:
    print("عدد صفر است.")
else:
    print("عدد منفی است.")

در این برنامه:

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 راه‌حل بنویسید (کد را می‌توانید بعداً در بخش تمرین‌ها پیاده‌سازی کنید):

  1. برنامه‌ای بنویسید که عدد ورودی را به این صورت دسته‌بندی کند:
    • بزرگ‌تر از ۱۰۰ → «خیلی بزرگ»
    • بین ۱۰ تا ۱۰۰ (شامل ۱۰ و ۱۰۰) → «معمولی»
    • کمتر از ۱۰ → «کوچک»
  2. برنامه‌ای که بر اساس ساعت (عدد ۰ تا ۲۳) چاپ کند:
    • ۵ تا ۱۲ → «صبح بخیر»
    • ۱۲ تا ۱۸ → «ظهر/عصر بخیر»
    • ۱۸ تا ۲۳ → «شب بخیر»
    • غیر از این‌ها → «وقت نامعتبر»

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

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!