در آموزش قبل با نحوۀ استفاده از دستور if
آشنا شدیم و دیدیم که این دستور شرطی به صورت تحتالفظی بدین صورت بیان میشود که «اگر عبارت x درست باشد، آنگاه y اجرا میشود.» با این حال، بارها برایمان پیش آمده است که در زمان تصمیمگیری در مورد انجام کاری تحت شرایطی خاص به حالت بالعکس نیز فکر میکنیم و سناریو خاصی را برای آن در نظر میگیریم. برای مثال، یک سناریوی فرضی را در نظر میگیریم که در آن میگوییم «اگر عجله داشته باشم با تاکسی رفتوآمد میکنم و در غیر این صورت از اتوبوس استفاده میکنم.»
در فرآیند توسعهٔ نرمافزار نیز موارد بسیاری پیش میآید که برخی دستورات خاص در صورت برقراری شرطی اجرا میشوند و در غیر این صورت نیاز است تا مجموعۀ دیگری از دستورات اجرا شوند که در زبان برنامهنویسی پایتون این الگوریتم را با دستور مرکب چندبندی تحت عنوان if...else
پیادهسازی میکنیم که فرم کلی کدنویسی این دستور مرکب بدین صورت میباشد:
if conditions:
# statement 1
else:
# statement 2
توجه داشته باشیم که سربند if
و else
هر دو در یک بلوک قرار دارند و بلوک کدهای بدنۀ else
همچون دستورات بدنۀ if
نسبت به سربند آن تورفتگی دارند. برای مثال، برنامۀ زیر را در نظر میگیریم:
if not 1:
print("True")
else:
print("False")
همانطور که در آموزشهای گذشته بیان کردیم، مفسر پایتون عدد یک را برابر با مقدار True
ارزیابی میکند و بنابراین دستور not 1
مقدار بولینی معادل False
ارزیابی میشود بدین معنی که نتیجۀ بررسی دستور if
برابر با False
میباشد و میدانیم که بدنۀ این شرط تنها در صورتی اجرا میشود که مقدار آن برابر با True
ارزیابی شود که از همین روی مفسر پایتون به سراغ بدنۀ else
رفته و دستورات داخل آن را اجرا میکند. حال اسکریپت فوق را در فایلی به نام ifElse.py
ذخیره کرده و آن را اجرا میکنیم که در نتیجه استرینگ «False» در خروجی چاپ خواهد شد:
False
حال قصد داریم تا دستورات شرطی پیچیدهتری پیادهسازی کنیم بدین صورت که شرایط مختلفی از مسئله را مد نظر قرار میدهیم و به ازای رخ دادن هر یک از شرایط، یکسری تسک خاص انجام میدهیم. برای آشنایی با نحوۀ پیادهسازی چنین مثالی، کد زیر را مد نظر قرار خواهیم داد:
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 حتماً باید وجود داشته باشد اما نوشتن بندهای elif و else کاملاً دلخواه است و در صورت نیاز میتوان آنها را در برنامه وارد و یا از آن حذف کرد. همچنین دستورهای elif همیشه بعد از دستور if و پیش از دستور else قرار میگیرند. |
در ادامۀ تفسیر کد فوق باید بگوییم که مفسر پایتون به سراغ اجرای دستور if
میرود که اگر شرط این دستور برقرار باشد یا به عبارتی کاربر کلمۀ «rice» را وارد کرده باشد استرینگ «.It costs 10000 Tomans per Kilo» را در خروجی چاپ میکند اما اگر شرط if
برقرار نباشد، مفسر به سراغ دستور بعدی میرود که دستور elif
است و بدین صورت تفسیر میشود که اگر شرط if
برقرار نبود، شرط مربوط به دستور elif
چک میشود و در صورت برقرار بودن این شرط، دستورات بدنۀ آن اجرا میشود.
بنابراین همچون دستور if
اگر عبارت جلوی دستور elif
برابر با مقدار True
ارزیابی شود، بدنۀ آن اجرا میشود که در مثال فوق اگر کاربر کلمۀ «cheese» را وارد کند، استرینگ «.It costs 5000 Tomans» در خروجی چاپ میشود و در غیر این صورت نیز مفسر باز هم به سراغ دستورات بعدی میرود که در این برنامه دستور بعد نیز elif
است و شرط آن بررسی میشود تا در صورت برقرار بودن شرط مذکور، دستورات مربوطه اجرا شود و در غیر این صورت مفسر به سراغ دستور بعد میرود که در این مثال دستور else
است.
توجه داشته باشیم که دستور else
زمانی اجرا میشود که هیچ یک از شروط قبلی برقرار نبوده و مقدار بولین مربوط به آنها برابر True
نگردد و این در حالی است که اگر یکی از شروط مذکور برقرار باشد، مفسر وارد بدنۀ آن شده و دستورات مربوطه را اجرا میکند و با پایان یافتن اجرا نیز از دستورات مرکب خارج شده و سایر دستورات برنامه را اجرا میکند. اسکریپت برنامۀ فوق را در فایلی به نام foodstuff.py
ذخیره کرده و آن را اجرا میکنیم که به عنوان مثال، دو نمونه از اجرای این کد را در ادامه آوردهایم:
============ 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!
همانطور که مشاهده میکنید، در اجرای اول استرینگ «egg» را به عنوان ورودی به برنامه دادهایم که منجر به اجرای دستور قرار گرفته در elif
دوم شده و استرینگ «.It costs 500 Tomans» در خروجی چاپ میشود اما در اجرای دوم استرینگ «meat» را به عنوان ورودی دادهایم که این مقدار برای برنامه تعریف نشده است به طوری که هیچ یک از شروط if
و elif
برقرار نشده و از همین روی مفسر به سراغ دستور else
رفته و دستورات داخل آن را اجرا میکند که در نهایت منجر به چاپ استرینگ «!I don't have in stock» در خروجی میشود.