آشنایی با دستور if ... else در زبان برنامه نویسی پایتون


در آموزش قبل با نحوه ی استفاده از دستور شرطی if آشنا شدیم. می توانیم حالت کلی دستور if را به صورت غیر رسمی این طور بیان کنیم:

اگر عبارت x درست باشد، آن گاه y اجرا می شود.

با این حال، بارها برای ما پیش آمده است که در زمان تصمیم گیری در مورد انجام کاری تحت یک شرطی خاص به شرایط عکس آن هم فکر می کنیم و سناریو خاصی برای آن در نظر می گیریم. برای مثال می گوییم: "اگر عجله داشته باشم با تاکسی رفت و آمد می کنم، در غیر این صورت از اتوبوس استفاده می کنم." در زمان کدنویسی برنامه ها نیز موارد بسیاری پیش می آید که اگر شرطی برقرار باشد، دستورات خاصی اجرا می شوند و در صورت برقرار نبودن شرط مجموعه ی دیگری از دستورات اجرا می شوند. در زبان برنامه نویسی پایتون این الگوریتم را با دستور مرکب چند بندی if…else پیاده سازی می کنیم. حالت کلی کدنویسی این دستور مرکب به صورت زیر است:

if conditions:
    statement 1
else:
    statement 2

توجه داشته باشید که بلوک کدهای بدنه ی else را نسبت به سربند آن به صورت تورفته می نویسیم، اما سربند if و else هر دو در یک بلوک قرار دارند. برای مثال برنامه ی زیر را در نظر بگیرید:

if not 1:
    print("True")
else:
    print("False")

اسکریپت این برنامه را در فایل ifElse.py ذخیره می کنیم. به نظر شما کدام یک از بندهای این دستور مرکب اجرا خواهد شد، if یا else؟ شرط جلوی عبارت if به صورت not 1 بیان شده است. گفتیم مفسر پایتون عدد 1 را برابر با مقدار True ارزیابی می کند؛ زمانی که عملگر not را روی آن اثر می دهیم مقدار آن عکس می شود، یعنی نتیجه ی بررسی شرط if برابر با False است. می دانیم که بدنه ی دستور if در صورتی اجرا می شود که شرط آن برابر با True ارزیابی شود که در این جا چنین نیست، بنابراین مفسر پایتون به سراغ بدنه ی else می رود و آن را اجرا می کند. در نتیجه خروجی حاصل از اجرای این برنامه برابر با چاپ عبارتی تحت عنوان "False" خواهد بود.

حال قصد داریم دستورات شرطی تا حدودی پیچیده تری را مد نظر قرار دهیم به این صورت که حالات مختلف را در نظر بگیریم و به ازای رخ دادن هر حالت کارهای خاصی را انجام دهیم. برنامه ی زیر که در فایل foodstuff.py ذخیره شده است را در نظر بگیرید:

foodstuff = input("Please enter your choice(rice,cheese,egg)-->")
if foodstuff=="rice":
	print("It costs 10000 Tomans per Kilo.")
elif foodstuff=="cheese":
	print("It costs 5000 Tomans.")
elif foodstuff=="egg":
    print("It costs 500 Tomans")
else:
    print("I don't have in stock!")

در این برنامه از کاربر درخواست می شود نام یک ماده ی غذایی را وارد کند، آن گاه مفسر پایتون بر اساس ورودی کاربر باید تصمیم بگیرد که چه پیغامی به او بدهد. اولین دستور این برنامه نام ورودی را از کاربر می گیرد و به متغیر foodstuff به معنی «ماده ی غذایی» ارجاع می دهد. آن گاه مفسر به سراغ دستور if می رود. اگر شرط این دستور برقرار باشد، یعنی کاربر کلمه ی rice به معنی «برنج» را وارد کرده باشد پیغامی برای او چاپ می شود که قیمت هر کیلو گرم برنج را اعلام می کند اما اگر شرط if برقرار نباشد مفسر پایتون به سراغ دستور بعدی می رود که elif است. دستور elif به این صورت ترجمه می شود: "در غیر این صورت اگر ..."، و واضح است که مفسر پایتون پس از آن به دنبال یک شرط می گردد که آن را بررسی کند.

مانند دستور if، اگر عبارت جلوی elif برابر با مقدار True ارزیابی شود بدنه ی دستور elif اجرا می شود، برای مثال در برنامه ی فوق اگر کاربر کلمه ی cheese به معنی «پنیر» را وارد کند، قیمت یک قالب پنیر برای او چاپ می شود و در غیر این صورت مفسر پایتون باز هم به سراغ دستورات بعدی می رود. در این برنامه دستور بعد نیز elif است که مجدداً ابتدا شرط آن بررسی می شود، اگر درست بود دستورات داخل بدنه ی آن اجرا می شود و در غیر این صورت مفسر باز هم به سراغ دستور بعد می رود که در این جا else است.

توجه داشته باشید که دستور else زمانی اجرا می شود که پاسخ به شرط هیچ یک از دستورات قبلی True نبوده باشد و اگر در یکی از مراحل قبلی شرط یک بند درست باشد و مفسر وارد بدنه ی آن شده باشد، بعد از اجرا دستورات بدنه ی آن بند، کار این دستور مرکب به پایان می رسد و در صورت وجود دستورات دیگر مفسر به سراغ آن ها می رود. دو نمونه از اجرای کد برنامه ی بالا را در زیر می بینید:

============ RESTART: D:/ SokanAcademy/Python/ifElse.py ============
Please enter your choice(rice,cheese,egg)-->egg
It costs 500 Tomans.
>>> 
============ RESTART: D:/ SokanAcademy/Python/ifElse.py ============
Please enter your choice(rice,cheese,egg)-->meat
I don't have in stock!
>>>
به خاطر داشته باشید
به خاطر داشته باشید که در یک دستور مرکب شرطی به این صورت، بند دستور if حتماً باید وجود داشته باشد؛ با این حال نوشتن بندهای elif و else کاملاً دلخواه است و در صورت نیاز می توان آن ها را در برنامه وارد یا حذف کرد. هم چنین دستورهای elif همیشه بعد از دستور if و پیش از دستور else قرار می گیرند.

در تفسیر برنامه ی فوق بایستی گفت که در دفعه ی اول، کاربر egg به معنی «تخم مرغ» را وارد کرده لذا دستور قرار گرفته در elif دوم که مسئول چاپ کردن عبارت It costs 500 Tomans به معنی «پانصد تومان می شود» اجرا می گردد اما در اجرای دوم برنامه، کاربر مقداری معادل با meat به معنی «گوشت» را وارد کرده و از آنجا که این مقدار در برنامه تعریف نشده است، نه پاسخ به شرط if درست بوده و نه پاسخ به شرط های elif، لذا برنامه وارد دستور else می شود که مسئول چاپ کردن عبارت !I don`t have in stock به معنی «موجود نداریم» است.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
Mehran Sanea
Mehran Sanea
۱۳۹۶/۰۶/۰۲
سلام استاد من از دستور زیر در یک برنامه استفاده کردم
if age == 0:
اما هنگام اجرای فرمان اون علامت دو نقطه آخر فرمان رو با یک پیکان نشون میده م این ارور رو میویسه

if age == 0:
^
SyntaxError: invalid syntax

ممنون میشم راهنمایی کنید.
محمدعلی بحرینی
محمدعلی بحرینی
۱۳۹۶/۰۶/۰۳
سلام خدمت شما کاربر گرامی.
خب در نظر داشته باشید که if جز دستورات مرکب هست و دستورات مرکب هم حتما باید یک چیزی درون خودشون برای اجرا داشته باشن. بنابراین با وجود اینکه چیزی که شما نوشتید از لحاظ syntax درست هست، ولی چون بدنه ای برای اجرا نداره، یک Error محسوب میشه.
اگر فعلا دستور خالی هست و چیزی برای اجرا ندارید و یا اینکه میخواید بعدا این قسمت رو تکمیل کنید میتونید از دستور pass استفاده کنید که در واقع دستوری هست که هیچ کاری انجام نمیده.

در پاسخ به

Mehran Sanea
Mehran Sanea
۱۳۹۶/۰۶/۰۳
دستور من یک فرمان هم داره. من ارور رو با حذف علامت دو نقطه رفع کردم اما حالا به دستور داخل if گیر داده و میگه دستور print مشکل سینتکسی دراه! کد من به این شکل هست:

age = int(input("Please enter your age (Just Number) ")
if age == 0
print("Hey! are you kidding me?")

و اما ارور به شکل زیره:

print("Hey! are you kidding me? /n enter yor real age ")
^
SyntaxError: invalid syntax

در پاسخ به

محمدعلی بحرینی
محمدعلی بحرینی
۱۳۹۶/۰۶/۰۳
خب شما در واقع مشکل رو رفع نکردید.
ببینید دستور if حتما باید علامت دونقطه رو داشته باشه. اگر شما میفرمائید که دستوری هم بعدش وجود داره، پس احتمالا تورفتگی رو رعایت نکردید. حتما دقت کنید که دستوری که در نظر دارید جز شرط و در واقع if باشه، باید تورفتگی رو نسبت به اون رعایت کرده باشید.

در پاسخ به

Mehran Sanea
Mehran Sanea
۱۳۹۶/۰۶/۰۵
تو رفتگی رو رعایت کردم از پایتون نسخه 2.7.13 در سیستم عامل کالی لینوکس استفاده میکنم.(البته فایل رو با پایتون نسخه 3.6.2 هم اجرا کردم باز هم ارور داد.)
وقتی دو نقطه در دستور قرار میدم , اون رو به عنوان مشکل سینتکسی شناسایی میکنه و وقتی پاک میکنم , print() که در بدنه if هست رو مشکل سینتکسی شناسایی میکنه.
اگر مقدوره , من فایل رو آپلود کنم و لینک رو به شما بدم برای بررسی.
با تشکر.

در پاسخ به

a.jafari.v
a.jafari.v
۱۳۹۵/۰۸/۱۱
با تشکر از شما
میخواستم بدونم اگر در دستور بالا به جای elif از if استفاده کنیم چه فرقی میکنه؟
کاربر میهمان
کاربر میهمان
۱۳۹۵/۰۴/۰۴
مرسی از آموزش های عالیتون
ی سوال داشتم توی این بخش.
چرا بعد از دستورهامون از علامت == استفاده کردیم اینجا؟ ولی توی آموزش if فقط = کافی بود؟
نرگس اسدی
نرگس اسدی
۱۳۹۵/۰۴/۰۵
سلام
اشتباه می کنید. در بخش قبل هم از عملگر مقایسه ای استفاده شده. عملگر = برای انتسابه که در این جا کاربرد نداره

در پاسخ به

کاربر میهمان
کاربر میهمان
۱۳۹۴/۱۱/۱۱
مشتاقانه منتظر ادامه آموزش هستیم. با تشکر از سکان آکادمی
Amir.a.m
Amir.a.m
۱۳۹۴/۱۱/۰۸
با سلام
میخواستم بدونم تالیف دوره پایتون چقدر زمان میبره
چون من بخاطر رشته ی تحصیلیم درحال یادگیریه تعدادی از زبان ها هستم میخواستم بدونم اگه تالیف پایتون نیازمند
زمان زیادیه یه زبان دیگه ای رو شروع کنم
با تشکر
ادمین سایت
ادمین سایت
۱۳۹۴/۱۱/۰۹
با سلام و احترام
به استحضار می رساند که اگر شما محدودیت زمانی برای یادگیری این زبان داشته باشید، توصیه می کنیم که از سایر منابع استفاده نمایید

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به