فصل ۳: کنترل جریان — تصمیم‌گیری و تکرار

if/elif/else، عملگرهای مقایسه، مقایسه‌ی زنجیره‌ای و عبارت شرطی

برنامه‌ای که تصمیم می‌گیرد

تا این‌جا برنامه‌ها خط‌به‌خط از بالا به پایین اجرا می‌شدند. دستور if اجازه می‌دهد بخشی از کد فقط در صورت درست بودن یک شرط اجرا شود. در پایتون، بلوک هر شرط با دونقطه شروع می‌شود و با تورفتگی (۴ فاصله) مشخص می‌شود؛ خبری از آکولاد نیست و تورفتگی جزو نحو زبان است، نه سلیقه.

area = 12            # متر مربع
city = "تهران"

if area >= 12:
    shipping = 0
elif area >= 6:
    shipping = 350_000
else:
    shipping = 600_000

if city in ("کاشان", "آران و بیدگل"):
    shipping = 0         # ارسال درون‌شهری رایگان

print(f"هزینه‌ی ارسال: {shipping:,} ریال")

پایتون شرط‌ها را به ترتیب بررسی می‌کند و اولین شاخه‌ی درست را اجرا می‌کند؛ بقیه نادیده گرفته می‌شوند. پس ترتیب elif ها مهم است: شرط خاص‌تر را بالاتر بگذارید. اگر area >= 6 را اول می‌نوشتید، فرش ۱۲ متری هم هزینه‌ی ۳۵۰ هزار ریالی می‌گرفت.

عملگرهای مقایسه

عملگرمعنینکته
== و !=برابر / نابرابرمقایسه‌ی مقدار
< <= > >=کوچک‌تر/بزرگ‌ترروی رشته‌ها الفبایی (بر اساس کد یونیکد)
in و not inعضویتروی رشته، لیست، دیکشنری (کلیدها)، set
is و is notهویت (همان شیء)فقط برای None، True، False

مقایسه‌ی زنجیره‌ای

پایتون، برخلاف بیشتر زبان‌ها، مقایسه‌ها را مثل ریاضی زنجیر می‌کند: 100 <= width <= 400 یعنی «عرض بین ۱۰۰ و ۴۰۰»، و معادل 100 <= width and width <= 400 است با این تفاوت که width فقط یک‌بار ارزیابی می‌شود.

عبارت شرطی (ternary)

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

label = "عمده" if quantity >= 10 else "خرده"
unit = "تخته" if quantity == 1 else "تخته‌ها"

عبارت شرطی را تودرتو نکنید؛ دو سطح ternary در یک خط خوانایی را نابود می‌کند و آن‌جا if/elif معمولی بهتر است.

کاهش تودرتویی

کد با پنج سطح if تودرتو خواندنی نیست. دو ترفند: شرط‌های مرتبط را با and ترکیب کنید و حالت‌های خطا را زودتر رد کنید (در توابع با return زودهنگام، که در فصل ۵ می‌بینید). قاعده‌ی سرانگشتی: اگر به سطح سوم تورفتگی رسیدید، مکث کنید و ساختار را بازبینی کنید.

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

  • "10" < "9" برابر True است، چون رشته‌ها کاراکتربه‌کاراکتر مقایسه می‌شوند و «۱» قبل از «۹» است. عددهایی را که از فایل یا input آمده‌اند، اول تبدیل کنید.
  • مقایسه‌ی ترتیبی دو نوع ناهمخوان مثل 5 < "5" در پایتون ۳ خطای TypeError می‌دهد، اما 5 == "5" بی‌صدا False برمی‌گرداند؛ دومی خطرناک‌تر است.
  • زنجیره‌ی a < b > c هم مجاز است و یعنی «b از هر دو بزرگ‌تر است»؛ مجاز بودن دلیل خوانا بودن نیست.
  • بلوک خالی مجاز نیست؛ اگر جای کدی را فعلاً خالی می‌گذارید، از pass یا ... (Ellipsis) استفاده کنید.
  • مخلوط کردن Tab و فاصله در تورفتگی خطای TabError می‌دهد؛ در VS Code پایین پنجره «Spaces: 4» را چک کنید و Convert Indentation to Spaces را بزنید.

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