در آموزش قبل با نحوۀ استفاده از دستور 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» در خروجی میشود.
