شرطها
در این درس با if و elif و else به برنامه قدرت تصمیمگیری میدهید و تورفتگی بلوکها و رفتار درست/غلط مقادیر را یاد میگیرید.
آنچه در این درس میآموزید
- با if و elif و else مسیرهای مختلف اجرای برنامه را بسازید
- تورفتگی استاندارد پایتون را رعایت کنید
- رفتار درستی/نادرستی مقادیر (truthiness) را پیشبینی کنید
فهرست مطالب
تمام برنامههایی که تا حالا نوشتهاید خطی بودند: هر خط، بعد از خط قبلی، همیشه و بیقید اجرا میشد. قدرت واقعی برنامه وقتی پیدا میشود که بسته به وضعیت دادهها مسیر عوض شود؛ اگر نمره بالای ۱۷ بود تعریف چاپ کن، اگر بودجه کم بود هشدار بده. ابزار این تصمیمگیری دستور if است.
if؛ اگر این بود، این را بکن
score = 17
if score >= 17:
print("Excellent")Excellent
دو جزء تازه در این کد هست. اول، علامت دونقطه در انتهای سطر if: پایتون میفهمد بعدش بلوک کد میآید. دوم، تورفتگی سطر بعد: خطی که چهار فاصله جلوتر است بدنه شرط است و فقط وقتی اجرا میشود که شرط درست باشد. چون 17 >= 17 برقرار است، پیام چاپ شد. اگر score مثلاً ۱۵ بود، این بلوک بیصدا رد میشد و هیچ چیز چاپ نمیشد.
تورفتگی؛ مرز بلوک در پایتون
در اکثر زبانها بلوک کد با آکولاد مشخص میشود و تورفتگی فقط زیبایی است؛ اما در پایتون تورفتگی بخشی از دستور زبان است. همه خطهای همتورفته بعد از دونقطه، یک بلوک محسوب میشوند. اگر بدنه شرط را نیتند کنید، برنامه اصلاً اجرا نمیشود:
score = 17
if score >= 17:
print("Excellent")IndentationError: expected an indented block after 'if' statement on line 2
قرارداد استاندارد پایتون چهار فاصله برای هر سطح تورفتگی است. با فاصله بزنید، نه کلید Tab؛ اگر لازم شد ویرایشگر خود را تنظیم کنید که Tab را به چهار فاصله تبدیل کند.
elif و else؛ چند مسیر با هم
زندگی فقط یک شرط ندارد. با elif (کوتاهشده «else if») چند شرط پشت هم بگذارید و با else حالت باقیمانده را بگیرید:
score = 17
if score >= 17:
print("Excellent")
elif score >= 12:
print("Pass")
else:
print("Fail")Excellent
قاعده مهم: شرطها از بالا بررسی میشوند و فقط نخستین شرط برقرار اجرا میشود؛ بقیه حتی اگر برقرار باشند نادیده میروند. برای همین ترتیب شرطها معنیدار است. اگر در این مثال score میبود ۹، شرط اول رد میشد، شرط دوم هم رد میشد و else اجرا میشد: «مردود». اگر ۱۳ بود، سطر «قبول» چاپ میشد و سطرهای بعدی اصلاً بررسی نمیشدند.
شرطهای ترکیبی
با عملگرهای منطقی که در درس عملگرها دیدید، میتوانید در یک if چند چیز را همزمان بررسی کنید:
temp = 28
sunny = True
if temp > 25 and sunny:
print("Go to the beach")Go to the beach
دونقطهی if را میتوانید به مقایسههای پیچیده هم وصل کنید؛ یادآوری کوچکی از درس عملگرها: نتیجه هر مقایسه یک مقدار bool است، و if فقط همان bool را نگاه میکند.
درست و نادرستِ هر مقدار
یک راز ظریف: هر مقداری در پایتون میتواند بهعنوان شرط استفاده شود. پایتون هر مقدار را یا «درست» میبیند یا «نادرست». فقط چند مقدار نادرست (falsy) وجود دارد: False، صفر به هر شکل (0 و 0.0)، رشته خالی "" و None. هر چیز دیگری درست در نظر گرفته میشود:
name = ""
if name:
print("Name entered")
else:
print("Name is empty")Name is empty
رشته خالی نادرست است، پس مسیر else رفت. به همین رفتار میگویند truthiness. کد if name: خواناتر و رایجتر از if name != "": است و همان کار را میکند.
تمرینها
تمرین
تمرین ۱ — زوج یا فرد؟
متغیری به نام n با مقدار ۷ تعریف کنید. با عملگر باقیمانده تشخیص دهید زوج است یا فرد و پیام مناسب («زوج» یا «فرد») چاپ کنید.
# Write your code hereنمایش راهحل
n = 7
if n % 2 == 0:
print("Even")
else:
print("Odd")Odd
::: :::
خلاصه
ifیک بلوک از کد را فقط وقتی شرط درست باشد اجرا میکند.- بلوک در پایتون با تورفتگی ساخته میشود؛ استاندارد، چهار فاصله است.
- شرطهای
ifوelifاز بالا بررسی میشوند و فقط نخستین برنده اجرا میشود؛elseباقیمانده را میگیرد. - چند مقدار فقط نادرستاند: False، صفر، رشته خالی و None؛ بقیه درست به حساب میآیند.
- با
andوorو مقایسه زنجیرهای شرطهای ترکیبی میسازید.
تصمیمگیری را یاد گرفتید؛ حالا نوبت تکرار است. در درس بعدی با حلقهها یاد میگیرید یک کار را هزار بار بدون هزار خط کد انجام دهید.