ساختارهای تصمیم‌گیری؛ مغز متفکر برنامه که راه درست رو انتخاب می‌کنه
تا حالا کدهایی که نوشتیم مثل یه قطار روی ریل صاف و مستقیم بودن: خط اول، خط دوم، خط سوم، تموم. اما دنیای واقعی اینطوری نیست. دنیا پر از شرط و انتخاب و مسیرهای فرعی‌ست. اگه بارون بیاد، چتر برمی‌داریم. اگه کیف پولمون خالی باشه، ویترین گردی می‌کنیم. اگه امتحان رو بالای ۱۰ بشیم، جشن می‌گیریم. برنامه‌ها هم برای اینکه باهوش به نظر بیان، باید بتونن تصمیم‌گیری کنن.

اینجاست که پای ساختارهای تصمیم‌گیری (Control Flow) میاد وسط. اینا همون چراغ راهنمای کدن که می‌گن: «وایسا! کدوم مسیر رو برم؟» و پایتون مثل یه رانندهٔ حرفه‌ای، با دیدن این ساختارها می‌فهمه باید کدوم بلوک رو اجرا کنه. بزن بریم ببینیم چطور به پایتون قدرت انتخاب بدیم.

if – اگه گفتی، اگه شرط برقرار بود...
if ساده‌ترین و مهم‌ترین ابزار تصمیم‌گیریه. ترجمه‌اش میشه: «اگر فلان شرط درست بود، این کار رو انجام بده.» مثل وقتی که می‌گی: «اگه بستنی فروشی باز بود، یه دونه وانیلی بخر.»

قالب کلی:


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


یادت باشه:

بعد از شرط حتماً دو نقطه : می‌ذاری.

خط بعدی حتماً تورفتگی (Indentation) داره (معمولاً ۴ فاصله). این تورفتگی تعیین می‌کنه کدوم خطوط متعلق به این if هستن.


temperature = 35

if temperature > 30:
    print("هوا گرمه، کولر رو روشن کن!")
    print("یه آبمیوه خنک هم بزن.")
print("این خط همیشه اجرا می‌شه، چون تورفتگی نداره.")


اگه temperature مثلاً ۲۵ بود، اون دو خط داخل if کلاً نادیده گرفته می‌شد و فقط خط آخر اجرا می‌شد. ساده و سرراست.

else – وگرنه...
if تنها فقط نصف ماجراست. معمولاً می‌خوایم بگیم «اگه شرط برقرار بود این کار رو بکن، در غیر این صورت اون کار رو بکن.» else همون "در غیر این صورت" رو می‌سازه.


age = 16

if age >= 18:
    print("می‌تونی گواهینامه بگیری 🚗")
else:
    print("هنوز باید صبر کنی، رفیق!")
    print("حداقل دوچرخه‌سواری بلدی؟")


else هیچ شرطی نمی‌گیره؛ فقط وقتی اجرا می‌شه که شرط if برقرار نباشه. دقت کن که else هم دو نقطه و تورفتگی می‌خواد و دقیقاً هم‌تراز با if خودش نوشته می‌شه.

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


score = 75

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"نمرهٔ شما: {grade}")
# خروجی: نمرهٔ شما: C


چون score عدد ۷۵ هست، شرط اول score >= 90 نادرسته (می‌ره بعدی)، شرط دوم score >= 80 هم نادرسته (می‌ره بعدی)، شرط سوم score >= 70 درسته و grade می‌شه "C". دیگه بقیهٔ elifها و else بررسی نمی‌شن. این خیلی خفنه چون می‌تونی بهترین شرط رو به ترتیب اولویت بچینی و پایتون سریع تصمیم بگیره.

نکته: می‌تونی هر تعداد elif که نیاز داری داشته باشی، ولی if فقط یه دونه میاد (اولش) و else هم نهایتاً یکی (آخرش). elif‌ها بینشون قرار می‌گیرن.

شرط‌های تو در تو – تودرتویی مثل عروسک روسی
گاهی یک شرط کافی نیست و باید داخل یه شرط، یه شرط دیگه هم بذاری. انگار از یه دالون می‌ری تو یه دالون دیگه. اینم فقط با رعایت تورفتگی‌های دقیق ممکنه.


is_weekend = True
weather = "sunny"

if is_weekend:
    print("آخر هفته‌ست، می‌تونیم برنامه بریزیم.")
    if weather == "sunny":
        print("بریم پیک‌نیک! ☀️")
    else:
        print("هوا خوب نیست، فیلم ببینیم 📺")
else:
    print("روز کاریه، باید بریم سر کار.")


اینجا اول چک می‌کنه که آخر هفته هست یا نه. اگه بود، بعدش چک می‌کنه هوا چطوره. اینطوری می‌تونی درخت تصمیم‌های پیچیده رو پیاده کنی. ولی حواست باشه زیاد تودرتو نکنی وگرنه کدت شبیه یه جنگل انبوه می‌شه که پیدا کردن راه خروج ازش سخته. در صورت امکان، از ترکیب شرط‌ها با and و or استفاده کن که قبلاً یاد گرفتیم.

عبارت شرطی یک‌خطی – پیتزای حاضری برنامه‌نویسی
یه جاهایی نمی‌خوای چهار خط بنویسی که یه مقدار رو بر اساس یه شرط ساده تعیین کنی. می‌خوای یه حرکت گانگ و خفن بزنی و همه رو تو یه خط بگی. پایتون یه میانبر خوشمزه داره به اسم عبارت شرطی یک‌خطی (Ternary Operator) که قالباش اینه:


variable = مقدار_اگر_درست if شرط else مقدار_اگر_نادرست


مثال:


age = 20
status = "بزرگسال" if age >= 18 else "بچه"
print(status)  # بزرگسال

# این دقیقاً معادل کد زیره:
# if age >= 18:
#     status = "بزرگسال"
# else:
#     status = "بچه"


با این ترفند، یه if-else ساده رو تو یه خط آب می‌کنی. برای شرط‌های تکی و نسبتاً ساده عالیه. اما اگه عملیات پیچیده‌ای داشته باشی، بهتره از بلوک‌های معمولی استفاده کنی تا خوانایی حفظ بشه.

راز پنهان: مفاهیم Truthy و Falsy
پایتون فقط به True و False صریح توجه نمی‌کنه. خیلی از چیزها رو می‌تونه به عنوان شرط قبول کنه. یه سری مقادیر هستن که پایتون اون‌ها رو «دروغین» (Falsy) در نظر می‌گیره، بقیه «راستین» (Truthy) هستن. لیست چیزای Falsy:

عدد 0 (و 0.0)

رشتهٔ خالی ""

لیست خالی []، دیکشنری خالی {}، مجموعهٔ خالی set()

None

False خودش.

هر چیز دیگه‌ای True حساب می‌شه. این ویژگی بهت اجازه می‌ده شرط‌های خیلی طبیعی بنویسی:


name = input("اسمتو بگو: ")
if name:   # یعنی اگر name خالی نباشه
    print(f"سلام {name}!")
else:
    print("اسم که نمی‌شه خالی باشه!")

# یه مثال دیگه
my_list = []
if not my_list:   # یعنی اگر لیست خالی باشه
    print("لیست خالیه، هیچی نداریم.")


با این ترفند می‌تونی از نوشتن if len(name) > 0: یا if my_list == [] خلاص بشی و کدت شسته‌رفته‌تر بشه.

یه سناریوی باحال: همیار هوشمند انتخاب فیلم
بیایم همهٔ اینارو بندازیم تو یه برنامهٔ واقعی که برای یه شب سینمایی تصمیم می‌گیره چی ببینیم:


# همیار انتخاب فیلم 🍿
mood = input("حالت چطوره؟ (خوشحال، غمگین، ماجراجو): ").strip()
time = int(input("چقدر وقت داری؟ (دقیقه): "))

if mood == "خوشحال":
    if time < 30:
        print("یه انیمیشن کوتاه و خنده‌دار ببین!")
    elif time < 90:
        print("یه کمدی رمانتیک سبک چطوره؟")
    else:
        print("ماراتن کمدی! یه فیلم بلند حال‌خوب‌کن بذار.")
elif mood == "غمگین":
    suggestion = "انیمیشن روح‌انگیز" if time > 60 else "کلیپ خنده"
    print(f"پیشنهاد: {suggestion}")
elif mood == "ماجراجو":
    print("یه فیلم علمی-تخیلی یا فانتزی حماسی انتخاب کن!")
else:
    print("ژانر نامعلومه، ولی هر چی دوست داری ببین!")

# یه پیشنهاد اضافه با شرط یک‌خطی
is_late = time > 120
warning = "دیرت می‌شه!" if is_late else "وقت کافی داری."
print(warning)


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

نکتهٔ طلایی: از دیکشنری به‌عنوان سوئیچ استفاده کن (پیش‌نمایش)
پایتون مثل C یا Java دستور switch-case نداره، ولی می‌تونی از دیکشنری‌ها (که بعداً یاد می‌گیری) استفاده کنی تا کلی شرط رو خیلی خفن مدیریت کنی. ولی فعلاً در حد if-elif-else پیش برو، چون ساده و همه‌فهمه.

جمع‌بندی: مسیرها رو با خیال راحت انتخاب کن
ساختارهای تصمیم‌گیری قلب تپندهٔ منطق برنامه‌ان. با if می‌گی «اگه»، با elif می‌گی «اگه این یکی»، با else می‌گی «وگرنه». شرط‌های تودرتو و عبارت‌های یک‌خطی هم چاشنی کار می‌شن تا کدت انعطاف‌پذیر و جمع‌وجور بشه. مهم‌تر از همه، پایتون بهت این امکان رو می‌ده که شرط‌هات رو مثل زبان آدمیزاد بنویسی: روان، شفاف و خوش‌خوان.

یادت باشه، هر بار که یه if می‌نویسی، داری به برنامه‌ات یه مغز می‌دی. حالا برو و برنامه‌هایی بنویس که مثل یه مشاور حرفه‌ای، با توجه به شرایط تصمیم بگیرن. دنیا پر از شرطه، ولی تو ارباب شرط‌هایی! 🧠✨🐍