در این فصل چه یاد میگیری#
تا اینجا کدت همیشه یک مسیر را میرفت: از بالا تا پایین، بیچونوچرا. ولی هر برنامهٔ واقعی باید تصمیم بگیرد — این ردیفِ داده سالم است یا خراب؟ این پیشبینی درست بود یا غلط؟ این مقدار گمشده است یا صفر؟ در این فصل if را میبینی، اولین ابزارِ تصمیمگیری، و همانجا میفهمی چرا تورفتگیِ خط در پایتون یک سلیقهٔ ظاهری نیست بلکه بخشی از خودِ زبان است.

آخر این فصل میتوانی:
- با
ifوelseوelifکد را وادار به تصمیمگیری کنی - بگویی تورفتگی در پایتون چه کاری میکند و
IndentationErrorرا رفع کنی - شرطها را با
andوorوnotترکیب کنی - با
inبپرسی که یک مقدار در یک فهرست هست یا نه - بگویی چرا فهرستِ خالی و رشتهٔ خالی در شرط مثلِ
Falseرفتار میکنند، و کجا این میانبر خطرناک است
قبل از شروع#
از فصل ۲: عملگرهای مقایسه (>، ==، !=) جوابشان True یا False است.
از فصل ۳: list و اینکه len() طولش را میدهد.
📓 نوتبوک: نوتبوک این فصل را در Colab باز کن — همهٔ کدهای این فصل آماده و بهترتیب داخلش هست.
۱. اولین شرط#
score = 78
if score >= 60:
print("قبول")
قبول
ساختارش سه تکه دارد: کلمهٔ if، یک شرط که جوابش True یا False است، و یک دونقطه. بعدش خطی که تورفته نوشته شده — و همان تورفتگی است که به پایتون میگوید «این خط مالِ آن if است».
اگر شرط True باشد آن خط اجرا میشود؛ اگر False باشد پایتون کاملاً از رویش میپرد. مقدارِ score را به 40 عوض کن و دوباره اجرا کن: هیچ خروجیای نمیگیری. این «هیچ خروجی» خودش نتیجه است، نه خرابی.
۲. else و elif#
معمولاً «اگر نه» هم لازم داری:
score = 45
if score >= 60:
print("قبول")
else:
print("مردود")
مردود
و وقتی بیش از دو حالت داری، elif (کوتاهشدهٔ else if) زنجیره میسازد:
score = 85
if score >= 90:
grade = "عالی"
elif score >= 75:
grade = "خوب"
elif score >= 60:
grade = "قابل قبول"
else:
grade = "نیاز به تلاش بیشتر"
print(f"نمره {score} → {grade}")
نمره 85 → خوب
نکتهٔ مهم: پایتون از بالا شرطها را یکییکی امتحان میکند و به اولین شرطِ درست که رسید، همان را اجرا میکند و بقیه را کاملاً نادیده میگیرد. عددِ 85 هم در >= 75 صدق میکند و هم در >= 60، ولی فقط اولی اجرا شد.
قبل از ادامه، جواب بده: اگر ترتیبِ شرطها را برعکس بنویسی — یعنی >= 60 را اول بگذاری — چه میشود؟ جواب: همهچیز خراب میشود. نمرهٔ ۹۵ هم به شرطِ اول میخورد و «قابل قبول» میگیرد، چون هیچوقت به شرطهای بعدی نمیرسد. در زنجیرهٔ elif همیشه از سختگیرانهترین شرط شروع کن. این یکی از رایجترین باگهای منطقی است و پایتون هیچ خطایی هم نمیدهد.
✅ چک کن: مقدارِ
scoreرا روی95،70و30امتحان کن و هر بار خروجی را ببین. هر چهار شاخه باید یک بار اجرا شوند. اگر شاخهای هیچوقت اجرا نشد، یعنی شرطش غیرقابلِدسترس است.
۳. تورفتگی: بخشی از زبان، نه تزئین#
در بیشترِ زبانها تورفتگی برای زیبایی است. در پایتون معنا دارد: تورفتگی تعیین میکند کدام خطها داخلِ کدام بلوکاند.
یک سلولِ خالی بساز و این را امتحان کن:
if score >= 60:
print("قبول")
Cell In[1], line 2
print("قبول")
^
IndentationError: expected an indented block after 'if' statement on line 1
پیام دقیقاً میگوید چه میخواهد: «بعد از دستورِ if در خطِ ۱، یک بلوکِ تورفته انتظار میرفت». پایتون نمیداند آن print مالِ if است یا خط بعدیِ مستقل، و بهجای حدسزدن میایستد.
قاعده ساده است: بعد از هر دونقطه، خطِ بعدی تورفته میشود. استاندارد چهار فاصله است و Colab خودش این کار را میکند.
🔧 اگر کار نکرد:
IndentationError: unexpected indentیعنی خطی را تورفته نوشتهای که نباید.TabError: inconsistent use of tabs and spacesیعنی بعضی خطها با Tab و بعضی با فاصله تورفته شدهاند — از بیرون کد کپی کردهای. راهِ رفعش: خطِ مشکلدار را کامل پاک کن و دوباره تایپش کن.
۴. ترکیب شرطها#
age = 22
has_ticket = True
if age >= 18 and has_ticket:
print("اجازهٔ ورود دارد")
if not has_ticket:
print("بلیت ندارد")
city = "شیراز"
if city == "تهران" or city == "شیراز":
print("در فهرست شهرهای هدف است")
اجازهٔ ورود دارد
در فهرست شهرهای هدف است
سه عملگرِ منطقی داری:
and— هر دو طرف بایدTrueباشند.or— کافی است یکیTrueباشد.not— جواب را برعکس میکند.
دقت کن if not has_ticket: هیچ خروجی نداد، چون has_ticket مقدارش True بود و not True میشود False.
⚠️ مواظب باش: این رایجترین اشتباهِ منطقیِ تازهکارهاست:
if city == "تهران" or "شیراز":کار نمیکند — ولی خطا هم نمیدهد. پایتون آن را اینطور میخواند: «اگرcityبرابرِ تهران است، یا اگر متنِ"شیراز"مقداری درستمانند دارد». و هر متنِ ناخالی درستمانند است، پس این شرط همیشهTrueمیشود. هر طرفِorباید یک شرطِ کامل باشد.
۵. in: عضویت در یک فهرست#
نوشتنِ زنجیرهٔ طولانیِ or هم زشت است و هم مستعدِ همان باگِ بالا. راهِ درست:
target_cities = ["تهران", "شیراز", "تبریز"]
if city in target_cities:
print(f"{city} در فهرست است")
if "اصفهان" not in target_cities:
print("اصفهان در فهرست نیست")
شیراز در فهرست است
اصفهان در فهرست نیست
in را در فصل ۴ روی dict دیدی (که کلیدها را میگشت). روی list عنصرها را میگردد و روی متن، زیررشته را. این یکی از خواناترین دستورهای پایتون است و در ترمِ ۲ مرتب بهکارش میبری.
۶. مقدارهای «درستمانند»: خالی یعنی False#
پایتون اجازه میدهد چیزی را که bool نیست هم بهعنوان شرط بگذاری، و خودش تصمیم میگیرد درستمانند است یا نه. قاعده در یک جمله: خالی و صفر یعنی نادرست، بقیه یعنی درست.
results = []
if results:
print("نتیجه داریم")
else:
print("هیچ نتیجهای پیدا نشد")
print(bool(""), bool("سارا"), bool(0), bool(3), bool([]), bool([1]))
هیچ نتیجهای پیدا نشد
False True False True False True
دو چیز در خطِ آخر تازه است. اول اینکه print میتواند چند چیز را با هم بگیرد: هر چه داخلِ پرانتز با ویرگول جدا کنی، پشتِ سرِ هم و با یک فاصله بینشان چاپ میشود — برای همین شش مقدار در یک خط آمدند. و دوم، تابعِ bool() هر مقداری را میگیرد و میگوید پایتون آن را درستمانند میبیند یا نه؛ دقیقاً همان قضاوتی که if پشتِ پرده میکند، این بار قابلِ دیدن.
این خیلی بهکار میآید: بهجای if len(results) > 0: مینویسی if results: که هم کوتاهتر است و هم خواناتر.
📏 اندازه بگیر: ولی یک تلهٔ جدی هم دارد که در ترمِ ۲ بارها به آن میخوری.
if count:وقتیcountصفرِ واقعی باشد هم رد میشود، درست مثلِ وقتی که اصلاً وجود نداشته باشد. «صفر فروش» و «دادهای نداریم» دو چیزِ کاملاً متفاوتاند و این کد هر دو را یکی میبیند. وقتی تفاوتِ «صفر» و «هیچ» مهم است — و در کارِ داده تقریباً همیشه مهم است — صریح بنویس:if count is not None:.
آن is عملگرِ تازهای است و کارش را با یک جمله بدان: x is None میپرسد «آیا x دقیقاً همان مقدارِ None است؟» — نه «آیا برابرِ چیزی است»، نه «آیا خالی است». برای None همیشه از is استفاده کن و نه از ==؛ این قراردادِ رسمیِ پایتون است و در هر کدی که بخوانی همینطور نوشته شده. و is not None هم دقیقاً برعکسش است: «مقداری وجود دارد».
🤖 از دستیارت بپرس: «در پایتون چه مقدارهایی falsy هستند؟ فهرستِ کامل را بده و برای هرکدام یک مثال بزن.» بعد هر مورد را خودت با
bool()در نوتبوک امتحان کن. یکیدو موردش احتمالاً غافلگیرت میکند.
واژههای تازهٔ این فصل#
| کلمه | تلفظ به حروف فارسی | یعنی چه |
|---|---|---|
| if / elif / else | ایف / اِلایف / اِلس | اگر / وگرنه اگر / وگرنه — سه تکهٔ یک تصمیم |
| indentation | ایندِنتِیشِن | تورفتگیِ خط؛ در پایتون تعیین میکند خط مالِ کدام بلوک است |
| and / or / not | اَند / اُر / نات | ترکیبِ منطقیِ شرطها |
| truthy / falsy | تروثی / فالسی | مقداری که در شرط مثلِ درست یا نادرست رفتار میکند |
| is None | ایز نان | «آیا این مقدار دقیقاً None است؟» — راهِ درستِ سنجشِ «هیچ» |
| IndentationError | ایندِنتِیشِن اِرور | تورفتگی سرِ جایش نیست |
تمرینها
اول خودت فکر کن یا امتحان کن — بعد اینجا را باز کن.
در فصل بعد#
حالا کدت میتواند تصمیم بگیرد، ولی هنوز فقط روی یک مقدار. اگر بخواهی همین بررسی را روی هزار ردیفِ داده انجام بدهی، باید هزار بار کد را کپی کنی. فصلِ بعد این را حل میکند: حلقه. یاد میگیری کد را وادار کنی روی همهٔ عنصرهای یک فهرست راه برود — و همانجا اولین باری است که کدت واقعاً شبیهِ کارِ داده میشود.
به آخر این فصل رسیدی!
اگر ساختی و جواب داد، این دکمه مال توست.