مقاله قبلی: آموزش زبان پایتون – ساختار داده ای مجموعه (set)
در این برنامه یاد می گیرید که چطور با استفاده از انواع اشکال مختلف دستور if … else ، در برنامه پایتون خود، بلوک های تصمیم گیری ایجاد کنید. حال شاید بپرسید که چه نیازی به بلوک های تصمیم گیری هست؟ در حقیقت، زمانی که شما می خواهید یک کد تنها در صورت برقرار بودن شرایط خاصی که مد نظر دارید اجرا شود به بلوک های تصمیم گیری نیاز پیدا می کنید. در این نوع ساختارها، داده ها با یکدیگر مقایسه می شوند و براساس نتیجه این مقایسه، شما می توانید تصمیم مناسبی اتخاذ کنید.
If به معنای “اگر“ است و else به معنای “وگرنه و در غیر این صورت“. یعنی اگر شرطی برقرار بود کاری را که به آن محول می کنید انجام دهد. و در غیر این صورت کار دیگری را شروع کند.
نحوه نگارش دستور if در پایتون
قسمت test expression توسط برنامه، مورد ارزیابی قرار گفته و تنها در صورت True بودن آن، دستور statement(s) اجرا می شود.
پایتون هر عبارت غیر صفری را به منزله True تفسیر می کند و در مقابل کلمه None ، عدد صفر و اشیاء تو خالی نظیر ” ” ، [ ] و { } را به صورت False تفسیر می کند.
عبارات شرطی موجود در ساختار تصمیم گیری if و ساختار های تکرار (مثل (for , while یعنی قسمت test expression توسط عملگرهای مقایسه ای ساخته می شود. در مقالات قبلی با این عملگرها آشنا شدید.
فلوچارت دستور if
برای درک بهتر نحوه عملکرد دستور if کافیست به فلوچارت زیر توجه کنید. همان طور که می بینید در صورتی که عبارت test expression دارای ارزش درست (True) باشد دستورات بدنه if اجرا می شوند و در صورت نادرست بودن آن (False)، کنترل اجرای برنامه به بعد از بلوک if منتقل می شود.
مثالی از دستور if
در مثال بالا، عبارت num>0 در حقیقت همان شرطی است که دستور if آن را مورد ارزیابی قرار می دهد. و در صورت true بودن حاصل این ارزیابی، دستورات بدنه if اجرا می شود و در غیر این صورت، دستور print داخل بلوک if نادیده گرفته شده و اجرا نمی شود.
از آن جا که مقدار اولین متغیر num برابر 3 است در نتیجه شرط بزرگ تر بودن از صفر را دارد لذا دستور print داخل بلوک if اجرا شده و مثبت بودن این عدد را در خروجی نشان می دهد و این درحالیست که دستور print خارج از بلوک if، همیشه اجرا شده و کاری به درست بودن یا نبودن شرط ما ندارد.
در دستور if دوم هم به دلیل این که مقدار متغیر num برابر -1 است در نتیجه یک عدد منفی است و شرط بزرگ تر بودن از صفر را ندارد و مقدار false را بر می گرداند بنابراین دستورات بدنه if نادیده گرفته شده و اجرا نمی شود و باز هم دستور print خارج از بلوک if بی اعتنا به شرط ما اجرا می شود.
ساختار if چند دستوره
همان طور که در دنیای واقعی می گوییم که اگر فلان اتفاق افتاد یک کار یا چندین کار را انجام بده (مثلا اگر آب آمد، ظرف ها را بشور، گل ها را آب بده و چای دم کن) در دنیای برنامه نویسی هم ممکن است در صورت برقرار بودن یک شرط، statement(s) ی اجرا شود که می تواند شامل بیش از یک کار (دستورات پایتون) باشد که با یکدیگر تشکیل یک بلوک را می دهند. و با جلو رفتن و کنگره بندی مشخص می شود. در زبان پایتون برای مشخص کردن دستورات موجود در یک بلوک می توان به هر میزان از ابتدای خط فاصله گرفت اما تمام این فاصله ها باید به یک اندازه باشد.
در قطعه کد زیر می توانید دستور if ی را ببینید که در آن، در صورت برقرار بودن شرط، به جای یک دستور، بلوکی از کدها اجرا می شوند.
نحوه نگارش دستور if…else
طبق قطعه کد بالا، دستور if…else عبارت شرطی test expression را مورد ارزیابی قرار می دهد و تنها زمانی، بدنه دستور if را اجرا می کند که حاصل این ارزیابی True باشد. و در صورت False بودن نتیجه، دستورات بلوک else اجرا می شود. به وسیله تورفتگی ها به راحتی می توان دستورات بلوکif و else را از هم تفکیک نمود.
فلوچارت دستور if…else
مثال هایی از دستور if…else
برنامه زیر مثبت یا منفی بودن یک عدد را مورد بررسی قرار داده و پیغام مناسبی را نمایش می دهد. مثلا از آن جا که در قطعه کد زیر، برابر 3 است پس شرط بزرگ تر بودن از صفر یا برابری با آن را دارد در نتیجه بدنه دستور if اجرا شده و بدنه دستور else نادیده گرفته می شود و در خروجی چاپ می شود که عدد مثبت یا برابر صفر است. اما اگر مقدار متغیر num برابر با -5 باشد یعنی شرط ما برقرار نیست در نتیجه این بار بدنه دستور if نادیده گرفته شده و به جای آن بدنه دستور else اجرا می شود و به تبع آن در خروجی پیغام منفی بودن این عدد نمایش داده می شود.
هم چنین در بخش زیر، قطعه کدی نوشته شده که در آن، قیمت جنسی از کاربر دریافت می شود. حال اگر این قیمت، کمتر از 1000 تومان (فرضا) باشد برای آن جنس تخفیف 5 درصد و اگر قیمت بالاتر از 1000 تومان باشد برایش تخفیف 10 درصد در نظر گرفته می شود. در هر دو حالت، میزان تخفیف پس از محاسبه به کاربر نشان داده می شود. علاوه بر این پس از پایان دستور if-else ، مبلغ تخفیف خورده از قیمت اصلی کالا کسر شده و قیمت نهایی نیز به کاربر نشان داده می شود. بنابراین ملاحظه می کنید که مثلا برای جنسی با قیمت 600 تومان (به دلیل کوچک تر از 1000 بودن) تخفیف 5 درصدی (معادل 30 تومان) لحاظ شده و قیمت نهایی برابر 570 تومان می شود. حال آن که برای جنسی با قیمت 1200 تومان (به دلیل بزرگ تر از 1000 بودن) تخفیف 10 درصدی (معادل 120 تومان) لحاظ شده و قیمت نهایی برابر 1080 تومان می شود.
کوتاه نویسی
در صورتی که ساختار تصمیم گیری if تنها دارای یک دستور باشد به جای نوشتن آن دستور در خط بعدی، می توان در همان خط، آن را نوشت. این شرایط برای ساختار if…else هم برقرار است. به مثال زیر توجه کنید.
نحوه نگارش دستور if…elif…else
کلمه کلیدی Elif مخفف عبارت else if است. این دستور به شما اجازه می دهد که بتوانید چندین شرط را مورد بررسی قرار دهید. درحقیقت با این کلمه کلیدی به پایتون می گوییم که اگر شرط قبلی برقرار نبود این شرط را هم بررسی کن.
اگر شرط if درست باشد دستورات بدنه آن اجرا می شود و در غیر این صورت شرط دستور Elif بررسی می شود. حال اگر این شرط برقرار باشد دستورات بدنه بلاک Elif و در غیر این صورت دستوران بلوک else اجرا خواهد شد.
با توجه به این که کدام شرط درست باشد تنها یکی از چندین بلوک if…elif…else اجرا می شود.
بلاک if تنها می تواند یک بلاک else داشته باشد در حالی که می توان چندین بلاک elif را برای آن تعیین نمود. در پایتون ساختار کنترلیswitch وجود ندارد و می توان کار انجام شده توسط این ساختار را توسط دستورات if…elif پیاده سازی نمود.
فلوچارت دستور if…elif…else
مثالی از دستور if…elif…else
قطعه کد زیر، مقدار یک متغیر را بررسی کرده و متناسب با مثبت بودن، منفی بودن و صفر بودن آن عدد، پیغام مناسبی را در خروجی نشان می دهد.
وقتی که مقدار متغیر num بزرگ تر از صفر باشد (عدد مثبت باشد) پیغام Positive number چاپ می شود.
اگر num برابر صفر باشد عبارت Zero می شود و در غیر این صورت (منفی بودن عدد) پیغام Negative number نمایش داده می شود.
ساختارهای تصمیم گیری تو در تو
شما می توانید یک دستور if…elif…else را در داخل if…elif…else دیگری قرار دهید. با این کار، بلوک های تصمیم گیری چندگانه و تو در تو (Nested if) ایجاد می شود. هم چنین می توانید هر تعداد از این جملات را در داخل یکدیگر قرار دهید. البته با این که می توان توسط تورفتگی کدها، سطح بلوک ها را از هم تفکیک کرد اما استفاده بیش از حد از این قابلیت ممکن است شما را گیج کند.
مثال هایی از if های تو در تو
در این مثال از کاربر خواسته می شود که عددی را وارد کند اما عددی که کاربر وارد می کند (num) از سه حالت مثبت، منفی و یا صفر بودن خارج نیست . بنابراین می توان با یک دستور if…else ساده بررسی نمود که num>=0 است یا num<0 . حال اگر شرط num>=0 را داشت باید با یک دستور if…else دیگر بررسی کرد که عدد بزرگ تر از صفر است (مثبت) یا برابر خود صفر. و این گونه است که یک if تو در تو ایجاد می شود.
در قطعه کد زیر هم کاربر عددی را وارد می کند. سپس در قالب یک دستور if-else بیرونی، زوج (num%2==0) یا فرد بودن این عدد مورد بررسی قرار می گیرد. پس از مشخص شدن زوج بودن عدد (بخش پذیری بر 2) یا فرد بودن آن (عدم بخش پذیری بر 2)، در داخل هر کدام از دستورات if و else دوباره بخش پذیری آن عدد بر 3 (num%3==0) نیز در قالب یک دستور if-else درونی تر مورد بررسی قرار می گیرد. لذا اگر عدد وارد شده :
- هم بر 2 و هم بر 3 بخش پذیر باشد عبارت “Divisible by 3 and 2” چاپ می شود.
- تنها بر 2 بخش پذیر باشد عبارت “divisible by 2 not divisible by 3” چاپ می شود.
- فقط بر عدد 3 بخش پذیر باشد عبارت “”divisible by 3 not divisible by 2 چاپ می شود.
- بر هیچ کدام از اعداد 2 و 3 بخش پذیر نباشد عبارت “not Divisible by 2 not divisible by 3” چاپ می شود.
ملاحظه می کنید که خروجی نشان داده شده برای اعداد 8 و 15 و 12 و 5 دقیقا مطابق با توضیحات بالاست.
استفاده از عملگرهای and و or در دستورات if و مشتقات آن
برای ترکیب عبارات شرطی موجود در ساختارهای if می توان از دو عملگر منطقی and و or استفاده نمود. همان طور که در قطعه کد زیر می بینید وقتی در ساختار تصمیم گیری if از عملگر and استفاده می کنیم دستورات بدنه بلوک if تنها زمانی اجرا می شوند که تمامی شرط ها درست باشند (برقرار باشند). مثلا در این جا چون تنها یکی از شرط ها درست است بنابراین دستور بدنه if نادیده گرفت شده و بدنه else اجرا می شود.
و این درحالیست که وقتی از عملگر or استفاده می کنیم کافیست یکی از شرط ها برقرار باشد تا دستورات بدنه if اجرا شود. مثلا در قطعه کد زیر با این که تنها یکی از شرط ها درست است اما چون از عملگر or استفاده کرده ایم دستورات بدنه if اجرا می شود.
inline- if :
- در پایتون برای نوشتن دستور if در یک خط، دو شیوه وجود دارد: در شیوه اول ابتدا کلمه کلیدی if، سپس شرط مورد نظر به همراه علامت کولن: و در نهایت، عبارت مورد نظر نوشته می شود.
- در حالت دوم ابتدا عبارتی را که دوست دارید در صورت برقرار بودن شرط اجرا شود می نویسید، سپس کلمه کلیدیif و شرط مورد نظر و نهایتا کلمه کلیدی else به همراه عبارتی که می خواهید در صورت عدم برقراری شرط مورد نظر اجرا شود.
توجه داشته باشید که در شیوه دوم برخلاف شیوه اول، وجود کلمه کلیدی else الزامیست.
در این مقاله با نحوه نگارش دستور if در پایتون، فلوچارت دستور if و مثالی از آن، ساختار if چند دستوره، نحوه نگارش دستور if…else و فلوچارت و مثال هایی از آن ها، کوتاه نویسی، نحوه نگارش دستور if…elif…else، فلوچارت و مثالی از آن، ساختارهای تصمیم گیری تو در تو و مثال هایی از آن، استفاده از عملگرهای and و or در دستورات if و مشتقات آن و inline- if آشنا شدید با بقیه آموزش دستور زبان برنامه نویسی پایتون با ما همراه باشید.
مقاله بعدی: حلقه های تکرار for و while در زبان برنامه نویسی پایتون
ترجمه: رقیه آقایاری