Kahibaro
Discord Login Register

شرط‌های تو در تو

ایدهٔ کلی شرط‌های تو در تو

گاهی یک شرط ساده if / elif / else کافی نیست؛ چون تصمیم دوم شما به نتیجهٔ تصمیم اول وابسته است. در این حالت از شرط‌های تو در تو استفاده می‌کنیم؛ یعنی یک if (یا elif / else) را داخل بلوک شرط دیگری قرار می‌دهیم.

به زبان ساده:

ساختار کلی شرط تو در تو

الگوی کلی به این شکل است:

if شرط_اول:
    # اگر شرط اول درست باشد
    if شرط_دوم:
        # این کد فقط اگر شرط اول و شرط دوم هر دو درست باشند اجرا می‌شود
    else:
        # این کد فقط اگر شرط اول درست و شرط دوم نادرست باشد اجرا می‌شود
else:
    # این کد اگر شرط اول نادرست باشد اجرا می‌شود

به فاصله‌ها (تورفتگی‌ها / indentation) دقت کنید:

مثال ۱: سن و اجازهٔ رانندگی

فرض کنید می‌خواهیم وضعیت رانندگی یک نفر را بررسی کنیم:

age = int(input("سن خود را وارد کنید: "))
has_license = input("آیا گواهینامه دارید؟ (yes/no): ")
if age >= 18:
    if has_license == "yes":
        print("می‌توانید رانندگی کنید.")
    else:
        print("سن شما کافی است، اما باید گواهینامه بگیرید.")
else:
    print("سن شما برای رانندگی کافی نیست.")

در این مثال:

مثال ۲: نمره و وضعیت قبولی

فرض کنید:

score = float(input("نمره را وارد کنید: "))
if score < 10:
    print("مردود")
else:
    if score >= 17:
        print("قبول با رتبهٔ ممتاز")
    else:
        print("قبول")

اینجا شرط تو در تو داخل else قرار گرفته است؛ یعنی:

شرط تو در تو یا `elif`؟

خیلی وقت‌ها می‌توانید به‌جای شرط تو در تو از elif استفاده کنید، و کد را خواناتر کنید.

مثال بالا را می‌توان این‌طور هم نوشت:

score = float(input("نمره را وارد کنید: "))
if score < 10:
    print("مردود")
elif score >= 17:
    print("قبول با رتبهٔ ممتاز")
else:
    print("قبول")

پس چه زمانی تو در تو منطقی‌تر است؟

مثال ۳: انتخاب از منوی چندمرحله‌ای

یک مثال خوبِ کاربرد شرط تو در تو، منوهای چندمرحله‌ای است:

print("1. نوشیدنی گرم")
print("2. نوشیدنی سرد")
main_choice = input("انتخاب کنید (1 یا 2): ")
if main_choice == "1":
    print("1. چای")
    print("2. قهوه")
    hot_choice = input("نوع نوشیدنی گرم را انتخاب کنید: ")
    if hot_choice == "1":
        print("شما چای انتخاب کردید.")
    elif hot_choice == "2":
        print("شما قهوه انتخاب کردید.")
    else:
        print("انتخاب نامعتبر برای نوشیدنی گرم.")
elif main_choice == "2":
    print("1. آب")
    print("2. آب‌میوه")
    cold_choice = input("نوع نوشیدنی سرد را انتخاب کنید: ")
    if cold_choice == "1":
        print("شما آب انتخاب کردید.")
    elif cold_choice == "2":
        print("شما آب‌میوه انتخاب کردید.")
    else:
        print("انتخاب نامعتبر برای نوشیدنی سرد.")
else:
    print("انتخاب نامعتبر در منوی اصلی.")

اینجا:

تورفتگی (Indentation) در شرط‌های تو در تو

در شرط‌های تو در تو، اشتباه در تورفتگی‌ها خیلی رایج است. چند نکته:

مثال نادرست:

age = 20
if age >= 18:
print("بزرگسال")  # خطا: تورفتگی ندارد
    if age > 60:
        print("سالمند")

مثال درست:

age = 20
if age >= 18:
    print("بزرگسال")
    if age > 60:
        print("سالمند")

مثال ۴: چندین سطح تو در تو

می‌توانید بیش از دو سطح تو در تو داشته باشید، اما خوانایی کد کم می‌شود. به مثال زیر دقت کنید:

username = input("نام کاربری: ")
password = input("رمز عبور: ")
if username == "admin":
    if password == "1234":
        print("ورود موفق")
        confirm = input("آیا می‌خواهید تنظیمات را ببینید؟ (yes/no): ")
        if confirm == "yes":
            print("نمایش تنظیمات...")
        else:
            print("بازگشت به صفحهٔ اصلی")
    else:
        print("رمز عبور اشتباه است.")
else:
    print("نام کاربری اشتباه است.")

سطح‌ها:

  1. بررسی نام کاربری
  2. اگر درست بود، بررسی رمز عبور
  3. اگر هر دو درست بودند، پرسیدن سؤال بعدی

این منطق به‌ترتیب اجرا می‌شود و هر مرحله به مرحلهٔ قبلی وابسته است، پس استفاده از شرط تو در تو منطقی است.

اشتباهات رایج در شرط‌های تو در تو

چند خطای متداول:

۱. شرط تو در تو بدون نیاز واقعی

گاهی می‌توان بدون تو در تو بودن، همان منطق را ساده‌تر نوشت:

# پیچیده و غیرضروری
if age >= 18:
    if age >= 65:
        print("بازنشسته")
    else:
        print("بزرگسال")
# ساده‌تر
if age >= 65:
    print("بازنشسته")
elif age >= 18:
    print("بزرگسال")

۲. قرار دادن `else` در سطح اشتباه

اگر تورفتگی را اشتباه بزنید، else به شرط دیگری وصل می‌شود:

age = 20
if age >= 18:
    if age > 60:
        print("سالمند")
else:
    print("کمتر از ۱۸ سال")  # این else در واقع مربوط به if age > 60 است، نه if age >= 18

در این مثال، else اشتباه در سطح داخلی قرار گرفته است. نسخهٔ درست:

age = 20
if age >= 18:
    if age > 60:
        print("سالمند")
else:
    print("کمتر از ۱۸ سال")

یا با ساختار بهتر:

age = 20
if age < 18:
    print("کمتر از ۱۸ سال")
elif age > 60:
    print("سالمند")

چه زمانی از شرط تو در تو استفاده کنیم؟

به‌طور خلاصه، شرط‌های تو در تو مناسب‌اند وقتی:

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

در ادامهٔ تمرین‌ها و پروژه‌ها، از شرط‌های تو در تو در کنار حلقه‌ها و ورودی کاربر استفاده خواهید کرد تا منوها و سناریوهای تعاملی بسازید.

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!