📘 درسنامه ساختارهای شرطی در پایتون

آموزش جامع تصمیم‌گیری در برنامه: عملگرهای مقایسه‌ای، if، if/else، if/elif/else، عملگرهای منطقی (and, or, not)، if تودرتو، عبارت شرطی (Ternary) — به همراه مثال‌های متعدد، تمرینات عملی و پروژه‌های کاربردی | آکادمی غیاثی

🔰 مقدمه: تصمیم‌گیری در برنامه‌نویسی

در پایتون، ساختارهای شرطی به ما اجازه می‌دهند که برنامه را بر اساس شرایط مختلف، به مسیرهای متفاوت هدایت کنیم. این یکی از مهم‌ترین مفاهیم برنامه‌نویسی است که به کد ما هوشمندی می‌بخشد! به زبان ساده، برنامه می‌تواند مانند انسان‌ها تصمیم بگیرد: «اگر باران می‌بارد، چتر بردار، در غیر این صورت، عینک آفتابی بزن».

💡 نکته مهم: در پایتون از کلمات کلیدی خاصی برای ساختارهای شرطی استفاده می‌کنیم: if (اگر)، elif (وگرنه اگر)، else (وگرنه). همچنین فاصله‌گذاری (indentation) در پایتون بسیار مهم است — بلاک‌های کد با ۴ فاصله یا یک Tab از هم جدا می‌شوند.

⚖️ عملگرهای مقایسه‌ای

قبل از یادگیری ساختارهای شرطی، باید با عملگرهای مقایسه‌ای آشنا شویم. این عملگرها دو مقدار را با هم مقایسه کرده و نتیجه‌ای از نوع True (درست) یا False (نادرست) برمی‌گردانند.

عملگرمعنیمثالنتیجه
==برابر با5 == 5True
!=نابرابر با5 != 3True
>بزرگ‌تر از5 > 3True
<کوچک‌تر از5 < 3False
>=بزرگ‌تر یا مساوی5 >= 5True
<=کوچک‌تر یا مساوی3 <= 5True
🐍 کد: آزمایش عملگرهای مقایسه‌ای
# آزمایش عملگرهای مقایسه‌ای
print("5 == 5:", 5 == 5)
print("5 != 3:", 5 != 3)
print("5 > 3:", 5 > 3)
print("5 < 3:", 5 < 3)
print("5 >= 5:", 5 >= 5)
print("3 <= 5:", 3 <= 5)

# مقایسه رشته‌ها (حساس به حروف بزرگ و کوچک)
print('"سلام" == "سلام":', "سلام" == "سلام")
print('"سلام" != "خداحافظ":', "سلام" != "خداحافظ")
📝 توضیح: در این کد، عملگرهای مختلف مقایسه را روی اعداد و رشته‌ها آزمایش می‌کنیم. خروجی هر خط مقدار True یا False است که نشان‌دهنده درست یا نادرست بودن شرط می‌باشد.

📌 ساختار if ساده

ساده‌ترین ساختار شرطی، if است. اگر شرط داخل if درست (True) باشد، بلاک کد داخل آن اجرا می‌شود.

🐍 کد: مثال if ساده
age = 18

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

print("این خط همیشه چاپ می‌شود.")
⚠️ نکته مهم: بعد از if حتماً باید : (دونقطه) قرار دهید و خط بعدی باید با فاصله (معمولاً ۴ فاصله یا Tab) شروع شود. در کد بالا، چون age برابر 18 است، شرط age >= 18 درست (True) است، بنابراین پیام داخل if چاپ می‌شود. خط آخر همیشه اجرا می‌شود چون خارج از if است.

🔄 ساختار if/else

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

🐍 کد: مثال if/else
age = 16

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

print("پایان برنامه")
📝 توضیح: در اینجا age برابر 16 است، بنابراین شرط age >= 18 نادرست (False) است. در نتیجه کد داخل else اجرا می‌شود و پیام «شما هنوز کودک/نوجوان هستید» چاپ می‌گردد.

🔀 ساختار if/elif/else (چند شرطی)

وقتی چند شرط متفاوت داریم، از elif (مخفف else if) استفاده می‌کنیم. این ساختار به ما اجازه می‌دهد چندین شرط را پشت سر هم بررسی کنیم.

🐍 کد: دسته‌بندی نمرات دانشجو
score = 85

if score >= 90:
    print("نمره عالی: A")
elif score >= 80:
    print("نمره خوب: B")
elif score >= 70:
    print("نمره متوسط: C")
elif score >= 60:
    print("نمره قبول: D")
else:
    print("مردود: F")
📝 توضیح: پایتون از بالا به پایین شرط‌ها را بررسی می‌کند. score برابر 85 است — شرط اول (>=90) نادرست، شرط دوم (>=80) درست است. بنابراین «نمره خوب: B» چاپ می‌شود و بقیه شرط‌ها نادیده گرفته می‌شوند. ترتیب elifها بسیار مهم است!

🧩 عملگرهای منطقی (and, or, not)

برای ترکیب چند شرط با هم، از عملگرهای منطقی and (و — همه شرایط باید درست باشند)، or (یا — حداقل یکی از شرایط درست باشد) و not (نقیض — برعکس کردن شرط) استفاده می‌کنیم.

🐍 کد: استفاده از عملگرهای منطقی
age = 20
has_license = True

# استفاده از and (هر دو شرط باید True باشند)
if age >= 18 and has_license:
    print("شما می‌توانید رانندگی کنید!")
else:
    print("شما نمی‌توانید رانندگی کنید.")

# استفاده از or (حداقل یکی از شرایط True باشد)
day = "جمعه"
if day == "جمعه" or day == "شنبه":
    print("امروز تعطیل است!")
else:
    print("امروز روز کاری است.")

# استفاده از not (برعکس کردن شرط)
is_raining = False
if not is_raining:
    print("آسمان صاف است. می‌توانید بیرون بروید!")
else:
    print("باران می‌بارد. چتر بردارید!")
📝 توضیح: در بخش اول، هر دو شرط (سن>=18 و داشتن گواهینامه) درست هستند، پس «and» درست است. در بخش دوم، day برابر «جمعه» است — با «or» چون یکی از شرط‌ها درست است، کل شرط درست می‌شود. در بخش سوم، not مقدار False را به True تبدیل می‌کند.

🏗️ حالت‌های تودرتو (Nested if)

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

🐍 کد: مثال if تودرتو
age = 25
has_money = True

if age >= 18:
    if has_money:
        print("شما می‌توانید وارد سینما شوید و بلیت بخرید!")
    else:
        print("شما بزرگسال هستید اما پول کافی ندارید.")
else:
    print("شما برای ورود به سینما باید بزرگ‌تر باشید.")
📝 توضیح: ابتدا شرط اول (سن>=18) بررسی می‌شود — درست است. سپس وارد if داخلی می‌شویم و شرط دوم (has_money) بررسی می‌شود — درست است. در نتیجه پیام موفقیت چاپ می‌شود. if تودرتو برای شرایط وابسته به هم بسیار مفید است.

✨ عبارت شرطی (Ternary Operator)

برای نوشتن سریع یک if/else در یک خط، می‌توانیم از عبارت شرطی استفاده کنیم. فرم کلی: مقدار_اگر_درست if شرط else مقدار_اگر_نادرست

🐍 کد: مثال عبارت شرطی
age = 20
status = "بزرگسال" if age >= 18 else "کودک"
print(status)

# همین کد به صورت معمولی:
# if age >= 18:
#     status = "بزرگسال"
# else:
#     status = "کودک"
📝 توضیح: این روش فشرده‌تر و خوانا برای if/elseهای ساده است. در یک خط هم شرط را می‌نویسیم و هم مقادیر بازگشتی برای هر دو حالت را مشخص می‌کنیم.

🚀 پروژه‌های کاربردی

مثال ۱: ماشین حساب ساده

🧮 کد: ماشین حساب با ساختارهای شرطی
# دریافت دو عدد و عملگر از کاربر
num1 = float(input("عدد اول را وارد کنید: "))
num2 = float(input("عدد دوم را وارد کنید: "))
operation = input("عملگر (+, -, *, /): ")

if operation == '+':
    result = num1 + num2
    print(f"{num1} + {num2} = {result}")
elif operation == '-':
    result = num1 - num2
    print(f"{num1} - {num2} = {result}")
elif operation == '*':
    result = num1 * num2
    print(f"{num1} * {num2} = {result}")
elif operation == '/':
    if num2 != 0:
        result = num1 / num2
        print(f"{num1} / {num2} = {result}")
    else:
        print("خطا: تقسیم بر صفر ممکن نیست!")
else:
    print("عملگر نامعتبر است!")
📝 توضیح: این برنامه یک ماشین حساب ساده است. ابتدا دو عدد و عملگر را از کاربر می‌گیرد، سپس با استفاده از if/elif/else عملیات مربوطه را انجام می‌دهد. توجه کنید که برای تقسیم، شرط جداگانه‌ای برای جلوگیری از تقسیم بر صفر قرار داده شده است.

مثال ۲: سیستم بانکی ساده

🏦 کد: سیستم معاملات بانکی
balance = 5000000  # 5 میلیون تومان موجودی اولیه

print("=== سیستم بانکی ===")
print(f"موجودی شما: {balance:,} تومان")
action = input("عملیات (1: برداشت, 2: واریز, 3: اطلاعات): ")

if action == '1':
    amount = int(input("مبلغ برداشت: "))
    if amount <= balance:
        balance -= amount
        print(f"برداشت موفق! موجودی جدید: {balance:,} تومان")
    else:
        print("موجودی کافی نیست!")
elif action == '2':
    amount = int(input("مبلغ واریز: "))
    if amount > 0:
        balance += amount
        print(f"واریز موفق! موجودی جدید: {balance:,} تومان")
    else:
        print("مبلغ واریز باید مثبت باشد!")
elif action == '3':
    print(f"موجودی فعلی: {balance:,} تومان")
else:
    print("عملیات نامعتبر!")
📝 توضیح: این برنامه یک سیستم بانکی ساده را شبیه‌سازی می‌کند. کاربر می‌تواند برداشت، واریز یا مشاهده موجودی انجام دهد. در برداشت، شرط می‌شود که مبلغ برداشت از موجودی بیشتر نباشد. در واریز، شرط می‌شود که مبلغ مثبت باشد.

✍️ تمرینات عملی

🎯 تمرین ۱: برنامه تشخیص سن
برنامه‌ای بنویسید که سن کاربر را از او بپرسد و پیام مناسبی نمایش دهد:
- اگر سن کمتر از ۱۰ سال: "شما کودک هستید"
- اگر سن بین ۱۰ تا ۱۷ سال: "شما نوجوان هستید"
- اگر سن بین ۱۸ تا ۶۴ سال: "شما بزرگسال هستید"
- اگر سن ۶۵ سال یا بیشتر: "شما سالمند هستید"
🔧 حل تمرین ۱:
age = int(input("لطفاً سن خود را وارد کنید: "))

if age < 10:
    print("شما کودک هستید")
elif age <= 17:
    print("شما نوجوان هستید")
elif age <= 64:
    print("شما بزرگسال هستید")
else:
    print("شما سالمند هستید")
📝 توضیح حل: از if/elif/else استفاده شده است. توجه کنید که ترتیب شرط‌ها از کوچک به بزرگ است تا همه بازه‌ها پوشش داده شوند.
🎯 تمرین ۲: بررسی زوج یا فرد بودن عدد
برنامه‌ای بنویسید که عددی از کاربر بگیرد و مشخص کند زوج است یا فرد.
🔧 حل تمرین ۲:
num = int(input("عدد را وارد کنید: "))

if num % 2 == 0:
    print(f"{num} یک عدد زوج است.")
else:
    print(f"{num} یک عدد فرد است.")
📝 توضیح حل: عملگر % باقیمانده تقسیم را برمی‌گرداند. اگر باقیمانده تقسیم بر 2 برابر صفر باشد، عدد زوج است، در غیر این صورت فرد است.
🎯 تمرین ۳: بررسی سال کبیسه
برنامه‌ای بنویسید که سال را از کاربر بگیرد و تعیین کند آیا سال کبیسه است یا نه.
(سال کبیسه: بخش‌پذیر بر ۴ ولی نه بخش‌پذیر بر ۱۰۰، یا بخش‌پذیر بر ۴۰۰)
🔧 حل تمرین ۳:
year = int(input("سال را وارد کنید: "))

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"{year} یک سال کبیسه است.")
else:
    print(f"{year} سال کبیسه نیست.")
📝 توضیح حل: از عملگرهای منطقی and و or برای ترکیب سه شرط استفاده شده است. ابتدا شرط بخش‌پذیری بر 4 و عدم بخش‌پذیری بر 100 بررسی می‌شود، یا بخش‌پذیری بر 400.
🎯 تمرین ۴: محاسبه مالیات
برنامه‌ای بنویسید که حقوق ماهانه یک کارمند را دریافت کند و مالیات او را طبق قوانین زیر محاسبه کند:
- اگر حقوق کمتر از ۱۰ میلیون تومان: بدون مالیات
- اگر حقوق بین ۱۰ تا ۲۰ میلیون: ۱۰٪ مالیات
- اگر حقوق بین ۲۰ تا ۳۵ میلیون: ۱۵٪ مالیات
- اگر حقوق بیشتر از ۳۵ میلیون: ۲۰٪ مالیات
🔧 حل تمرین ۴:
salary = float(input("حقوق ماهانه خود را وارد کنید (تومان): "))

if salary < 10_000_000:
    tax = 0
    print("مالیات: صفر تومان")
elif salary <= 20_000_000:
    tax = salary * 0.10
    print(f"مالیات: {tax:,.0f} تومان")
elif salary <= 35_000_000:
    tax = salary * 0.15
    print(f"مالیات: {tax:,.0f} تومان")
else:
    tax = salary * 0.20
    print(f"مالیات: {tax:,.0f} تومان")

print(f"حقوق خالص: {salary - tax:,.0f} تومان")
📝 توضیح حل: از if/elif/else با بازه‌های مشخص استفاده شده است. عدد 10_000_000 در پایتون همان ۱۰ میلیون است (زیرخط برای خوانایی). مالیات محاسبه و سپس حقوق خالص (حقوق منهای مالیات) چاپ می‌شود.

📌 خلاصه و جمع‌بندی

  • if: برای اجرای کد در صورت درست بودن شرط
  • if/else: برای دو مسیر مختلف (درست/نادرست)
  • if/elif/else: برای چندین شرط پشت سر هم
  • عملگرهای مقایسه‌ای: ==, !=, >, <, >=, <=
  • عملگرهای منطقی: and, or, not
  • if تودرتو: قرار دادن شرط داخل شرط دیگر
  • عبارت شرطی (Ternary): نوشتن if/else در یک خط
🎯 نکته نهایی: ساختارهای شرطی قلب تصمیم‌گیری در برنامه‌نویسی هستند. با تسلط بر این مفاهیم، می‌توانید برنامه‌هایی بنویسید که مانند انسان‌ها هوشمندانه تصمیم بگیرند!
✅ کپی شد!