آموزش پایتون, پایتون مقدماتی

شرط‌های if، elif و else در پایتون؛ آموزش تصمیم‌گیری برای مبتدیان

شرط‌های if، elif و else در پایتون

🗓 آخرین به‌روزرسانی:

برنامه زمانی هوشمند و کاربردی می‌شود که بتواند براساس شرایط مختلف تصمیم بگیرد. در پایتون، ساختارهای if، elif و else به ما اجازه می‌دهند یک شرط را بررسی کنیم و متناسب با نتیجه آن، بخش مشخصی از کد را اجرا کنیم.

این مطلب، درس هشتم از دوره رایگان آموزش پایتون از صفر است. در درس قبلی با عملگرهای ریاضی و مقایسه‌ای آشنا شدیم. اکنون از نتیجه مقایسه‌ها برای تصمیم‌گیری در برنامه استفاده می‌کنیم.

شرط در برنامه‌نویسی چیست؟

شرط عبارتی است که نتیجه آن یکی از دو مقدار True یا False خواهد بود. برای مثال:

age = 20
print(age >= 18)

خروجی:

True

چون مقدار age بزرگ‌تر یا مساوی ۱۸ است، نتیجه شرط درست می‌شود. ساختار if می‌تواند این نتیجه را بررسی کند و فقط در صورت درست‌بودن شرط، کد داخل خود را اجرا کند.

ساختار ساده if در پایتون

ساده‌ترین شکل یک شرط در پایتون چنین است:

age = 20

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

خروجی:

شما مجاز به ورود هستید.

در این ساختار:

  • if آغاز بررسی شرط است.
  • age >= 18 عبارت شرطی است.
  • علامت دونقطه : پایان خط شرط را مشخص می‌کند.
  • دستور تورفته فقط زمانی اجرا می‌شود که شرط درست باشد.

اهمیت تورفتگی در شرط‌های پایتون

پایتون برای تشخیص کدهای وابسته به شرط از تورفتگی یا indentation استفاده می‌کند. معمولاً هر سطح تورفتگی با چهار فاصله نوشته می‌شود:

temperature = 5

if temperature < 10:
    print("هوا سرد است.")
    print("لباس گرم بپوشید.")

print("پایان برنامه")

دو دستور اول داخل بلوک if قرار دارند؛ اما دستور آخر بدون تورفتگی است و در هر حالت اجرا می‌شود.

اگر تورفتگی رعایت نشود، ممکن است با خطای IndentationError روبه‌رو شوید:

if temperature < 10:
print("هوا سرد است")  # نادرست

استفاده از if و else

گاهی می‌خواهیم اگر شرط درست بود یک کار و اگر نادرست بود کار دیگری انجام شود. در این حالت از else استفاده می‌کنیم:

age = int(input("سن خود را وارد کنید: "))

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

در هر بار اجرای این برنامه فقط یکی از دو شاخه اجرا می‌شود.

مثال تشخیص زوج یا فرد بودن عدد

number = int(input("یک عدد وارد کنید: "))

if number % 2 == 0:
    print("عدد زوج است.")
else:
    print("عدد فرد است.")

اگر باقی‌مانده تقسیم عدد بر ۲ صفر باشد، عدد زوج است؛ در غیر این صورت، عدد فرد خواهد بود.

ساختار if، elif و else

هنگامی که بیش از دو حالت داریم، از یک یا چند شاخه elif استفاده می‌کنیم. واژه elif کوتاه‌شده عبارت else if است.

score = int(input("نمره خود را وارد کنید: "))

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

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

ترتیب شرط‌های elif چرا مهم است؟

شرط‌های محدودتر باید پیش از شرط‌های عمومی‌تر نوشته شوند. مثال زیر اشتباه است:

score = 95

if score >= 60:
    print("قبول")
elif score >= 90:
    print("عالی")

با وجود اینکه نمره ۹۵ است، برنامه عبارت «قبول» را نمایش می‌دهد؛ زیرا شرط اول درست شده و پایتون دیگر شرط دوم را بررسی نمی‌کند.

نسخه درست:

if score >= 90:
    print("عالی")
elif score >= 60:
    print("قبول")
else:
    print("رد شده")

استفاده از عملگرهای مقایسه‌ای در شرط

شرط‌ها معمولاً با عملگرهای مقایسه‌ای ساخته می‌شوند:

عملگرمعنامثال
==برابر استage == 18
!=برابر نیستstatus != "blocked"
>بزرگ‌تر استprice > 100
<کوچک‌تر استtemperature < 0
>=بزرگ‌تر یا مساوی استscore >= 60
<=کوچک‌تر یا مساوی استquantity <= 5

تفاوت = و == در شرط

علامت = برای انتساب مقدار و == برای مقایسه است:

password = "1234"

if password == "1234":
    print("رمز صحیح است.")

استفاده از یک علامت مساوی داخل شرط صحیح نیست و معمولاً خطای نحوی ایجاد می‌کند.

شرط‌های ترکیبی با and

عملگر منطقی and زمانی نتیجه درست می‌دهد که همه شرط‌های متصل‌شده درست باشند:

age = 25
has_ticket = True

if age >= 18 and has_ticket:
    print("ورود مجاز است.")
else:
    print("شرایط ورود کامل نیست.")

در این مثال، کاربر باید هم حداقل ۱۸ سال داشته باشد و هم بلیت معتبر داشته باشد.

بررسی بازه عددی

score = 78

if score >= 0 and score <= 100:
    print("نمره معتبر است.")
else:
    print("نمره باید بین صفر تا صد باشد.")

پایتون امکان نوشتن همین شرط را به شکل زنجیره‌ای نیز فراهم می‌کند:

if 0 <= score <= 100:
    print("نمره معتبر است.")

شرط‌های ترکیبی با or

عملگر or زمانی نتیجه درست می‌دهد که حداقل یکی از شرط‌ها درست باشد:

day = "جمعه"

if day == "پنجشنبه" or day == "جمعه":
    print("امروز آخر هفته است.")
else:
    print("امروز روز کاری است.")

معکوس‌کردن شرط با not

عملگر not نتیجه یک شرط را معکوس می‌کند:

is_blocked = False

if not is_blocked:
    print("حساب کاربر فعال است.")

چون مقدار is_blocked برابر False است، عبارت not is_blocked به True تبدیل می‌شود.

بررسی مستقیم متغیر بولی

برای بررسی یک مقدار بولی، نیازی به مقایسه مستقیم آن با True نیست:

is_logged_in = True

if is_logged_in:
    print("خوش آمدید")

این روش خواناتر از شکل زیر است:

if is_logged_in == True:
    print("خوش آمدید")

شرط روی رشته‌های متنی

می‌توان پاسخ متنی کاربر را نیز بررسی کرد. بهتر است پیش از مقایسه، فاصله‌های اضافی حذف و حروف انگلیسی یکدست شوند:

answer = input("آیا ادامه می‌دهید؟ yes/no: ").strip().lower()

if answer == "yes":
    print("برنامه ادامه پیدا می‌کند.")
elif answer == "no":
    print("برنامه متوقف شد.")
else:
    print("پاسخ نامعتبر است.")

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

می‌توان داخل یک شرط، شرط دیگری نوشت. این ساختار شرط تو در تو نام دارد:

username = input("نام کاربری: ").strip()
password = input("رمز عبور: ")

if username == "admin":
    if password == "1234":
        print("ورود موفق بود.")
    else:
        print("رمز عبور اشتباه است.")
else:
    print("نام کاربری پیدا نشد.")

شرط‌های تو در تو گاهی مفیدند؛ اما استفاده بیش از حد از آن‌ها خوانایی کد را کاهش می‌دهد. در بسیاری از موارد می‌توان با and ساختار ساده‌تری نوشت.

تفاوت چند if مستقل با زنجیره if و elif

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

number = 12

if number > 0:
    print("مثبت است")

if number % 2 == 0:
    print("زوج است")

در این مثال هر دو پیام نمایش داده می‌شوند.

اما در زنجیره if و elif فقط نخستین شاخه درست اجرا می‌شود:

if number > 0:
    print("مثبت است")
elif number % 2 == 0:
    print("زوج است")

در این نسخه فقط پیام «مثبت است» نمایش داده می‌شود. بنابراین انتخاب میان چند if مستقل و یک زنجیره elif به منطق برنامه بستگی دارد.

مقادیر Truthy و Falsy در پایتون

پایتون برخی مقادیر را در شرط‌ها به‌صورت خودکار درست یا نادرست در نظر می‌گیرد. رشته خالی، عدد صفر و مقدار None از نمونه‌های رایج مقادیر نادرست هستند.

name = input("نام خود را وارد کنید: ").strip()

if name:
    print("سلام", name)
else:
    print("نام وارد نشده است.")

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

عبارت شرطی کوتاه در یک خط

برای انتخاب ساده میان دو مقدار می‌توان از عبارت شرطی یک‌خطی استفاده کرد:

age = 20
status = "بزرگسال" if age >= 18 else "نابالغ"

print(status)

این روش برای شرط‌های کوتاه مناسب است؛ اما برای منطق چندمرحله‌ای، ساختار معمولی if خواناتر خواهد بود.

پروژه عملی: محاسبه تخفیف سفارش

در این پروژه، مبلغ سفارش از کاربر دریافت و درصد تخفیف براساس مبلغ تعیین می‌شود:

order_amount = float(input("مبلغ سفارش را وارد کنید: "))

if order_amount < 0:
    print("مبلغ سفارش نمی‌تواند منفی باشد.")
elif order_amount >= 1_000_000:
    discount_percent = 15
elif order_amount >= 500_000:
    discount_percent = 10
elif order_amount >= 200_000:
    discount_percent = 5
else:
    discount_percent = 0

if order_amount >= 0:
    discount_amount = order_amount * discount_percent / 100
    final_amount = order_amount - discount_amount

    print(f"درصد تخفیف: {discount_percent}%")
    print(f"مبلغ تخفیف: {discount_amount}")
    print(f"مبلغ نهایی: {final_amount}")

این پروژه چند مفهوم قبلی را ترکیب می‌کند: ورودی کاربر، تبدیل نوع، متغیر، عملگر ریاضی، مقایسه و ساختار شرطی.

پروژه دوم: تعیین وضعیت قبولی

score = float(input("نمره را وارد کنید: "))

if score < 0 or score > 20:
    print("نمره نامعتبر است.")
elif score >= 17:
    print("عالی")
elif score >= 14:
    print("خوب")
elif score >= 10:
    print("قبول")
else:
    print("مردود")

خطاهای رایج در شرط‌های پایتون

فراموش‌کردن دونقطه

if age >= 18  # نادرست
    print("مجاز")

در پایان خط‌های if، elif و else باید : قرار بگیرد.

تورفتگی نامعتبر

if age >= 18:
print("مجاز")  # نادرست

استفاده از = به‌جای ==

if username = "admin":  # نادرست
    print("خوش آمدید")

مقایسه عدد با رشته

age = input("سن: ")

if age >= 18:  # خطا؛ age رشته است
    print("بزرگسال")

ورودی باید ابتدا به عدد تبدیل شود:

age = int(input("سن: "))

نوشتن شرط غیرممکن

age = 25

if age < 18 and age > 60:
    print("شرط درست است")

یک مقدار نمی‌تواند هم‌زمان کمتر از ۱۸ و بیشتر از ۶۰ باشد. در چنین حالتی احتمالاً باید از or استفاده شود.

ترتیب اشتباه شاخه‌ها

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

تمرین‌های درس

  1. برنامه‌ای بنویسید که یک عدد بگیرد و مشخص کند مثبت، منفی یا صفر است.
  2. سن کاربر را دریافت کنید و مشخص کنید کودک، نوجوان یا بزرگسال است.
  3. سه عدد دریافت کنید و بزرگ‌ترین عدد را نمایش دهید.
  4. نام کاربری و رمز عبور بگیرید و پیام ورود موفق یا ناموفق نشان دهید.
  5. دمای هوا را دریافت کنید و وضعیت سرد، معتدل یا گرم را نمایش دهید.
  6. مبلغ خرید را بگیرید و براساس سه بازه مختلف، هزینه ارسال را تعیین کنید.
  7. یک سال را دریافت کنید و با استفاده از عملگر باقی‌مانده بررسی اولیه‌ای برای کبیسه‌بودن آن انجام دهید.

📌 همچنین بخوانید: بازار کار پایتون در ایران، نصب و تنظیم پایتون در VS Code و برنامه‌نویسی پایتون با گوشی

پرسش‌های متداول

آیا وجود else اجباری است؟

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

چند elif می‌توان نوشت؟

از نظر زبان پایتون محدودیت مشخصی برای تعداد شاخه‌های elif وجود ندارد؛ اما تعداد بسیار زیاد می‌تواند نشانه پیچیده‌شدن منطق برنامه باشد.

آیا بعد از else می‌توان شرط نوشت؟

خیر. else شرط جداگانه ندارد و تمام حالت‌هایی را پوشش می‌دهد که در شاخه‌های قبلی پذیرفته نشده‌اند.

چرا فقط یک شاخه از if و elif اجرا می‌شود؟

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

برای چند شرط مستقل از if استفاده کنیم یا elif؟

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

جمع‌بندی

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


← درس قبل: عملگرهای ریاضی و مقایسه‌ای در پایتون

درس بعد: حلقه for در پایتون — در حال آماده‌سازی

مشاهده فهرست کامل دوره آموزش پایتون

ادامه مسیر یادگیری پایتون

برای یادگیری منظم، آموزش‌های مرتبط زیر را به‌ترتیب دنبال کنید:

می‌خواهی پیشرفتت ذخیره شود؟با ورود یا ثبت‌نام رایگان، درس‌های تمام‌شده را علامت بزن و درصد پیشرفتت را در حساب کاربری ببین.ورود / ثبت‌نام برای ذخیره پیشرفت
درس بعدی · دوره رایگان پایتون (مقدماتی) (9 از 16)حلقه for در پایتون؛ آموزش تکرار، range و پیمایش داده‌ها ←
آموزش‌های تازه، کد آماده و رفع خطاهر هفته در کانال Dev Source؛ رایگان.
🧭 مسیر یادگیری پایتون از صفر
ماژول 3: شرط و حلقه — درس 9 از 44

برای ذخیره پیشرفت در همه دستگاه‌ها و دریافت گواهی پایان مسیر، رایگان ثبت‌نام کن یا وارد شو.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *