برنامهای که تصمیم میگیرد
تا اینجا برنامهها خطبهخط از بالا به پایین اجرا میشدند. دستور 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 را بزنید.