Skip to content

Latest commit

 

History

History
273 lines (126 loc) · 17.3 KB

control_flow.md

File metadata and controls

273 lines (126 loc) · 17.3 KB

{#control-flow}

کنترل گردش

برنامه‌هایی که تا به حال می‌نوشتیم، یک مجموعه‌ی از فراخوانی‌ها بود که توسط پایتون به صورت مرتب از بالا به پایین اجرا می‌شدند. حال اگر بخواهید گردش را تغییر بدهید باید چه کرد؟ برای مثال اگر بخواهید برنامه کارهای مختلفی در موقعیت‌های مختلف را انجام دهد. همانند چاپ در زمان‌های مختلف روز 'شب‌بخیر' و 'صبح‌بخیر' .

همان طور که شما حدس زدید این کنترل گردش است. در پایتون با سه روش می‌توان این کار را انجام داد: دستورات - if, for و while

دستور if

دستور if برای بررسی شرط استفاده می‌شود. if(اگر) شرط برقرار است بلوک اجرا می‌شود(بلوک if فراخوانی می‌شود). else(وگرنه) بلوک مربوط به وگرنه(بلوک else فراخوانی می‌شود) بررسی می‌شود. بند else اختیاری است.

برای مثال (فایل if.py را ذخیره کنید)

برای مشاهده برنامه‌ها بهتر است به لینک زیر سر بزنید:

نسخه‌ی گیت‌بوک

{% include "./programs/if.py" %}

خروجی:

{% include "./programs/if.txt" %}

نحوه عملکرد

در این برنامه فرضیات کاربران را می‌گیریم و فرضیات را بررسی می‌کنیم. برای مثال ایا ورروی عدد است؟. حال متغییری با نام +number+ را با هر عدد صحیح‌ که می‌خواهیم پر می‌کنیم. برای مثال عدد ۲۳ است. در گام بعدی در نظر می‌گیرم که کاربر از تابع input() که برای ورودی گرفتن است، استفاده می‌کند. این تابع‌هابرنامه‌های هستند که از چندین بخش برنامه‌های کوچک ساخته شده‌اند. درباره‌ی این موضوع در فصل تابع‌ها بحث خواهیم کرد.

در گام رشته موجود را با استفاده از تابع input می‌گیریم که برروی صفحه‌ای نمایش نشان داده می‌شود و منتظر گرفتن ورودی از کاربر می‌شود. وقتی که که ما چیزی را وارد می‌کنیم و دکمه‌ [enter] کیبورد را فشار می‌دهیم تابع input() انچه که ما وارد کرده بودیم رابه صورت یک رشته برمی‌گرداند.بعد ما با استفاده از int ان را به عدد تبدیل می‌کنیم و ان را در متغییر برای کاربر فرض کردیم ذخیره می‌کنیم.در صورتکه که int کلاس است ولی چیزی که شما ان را باید بدانید ان است که شما می‌توانید برای تبدیل رشته به عدد استفاده کنید(اگر رشته در حد مجاز عدد داشته باشد).

در گام بعدی ما فرض کاربر را با عددی که ما در نظر گرفته بودیم را بررسی می‌کنیم. اگر این اعداد مساوی هستند چاپ می‌کنیم صحیح است. این نکته را در نظر بگیرید که ما از فاصله‌هاو تورفتگی‌ها استفاده می‌کنیم برای انکه به پایتون بگویم که کدام یک از فراخوانی‌ها مال کدام یک از بلوک‌ها هستند. امیدوارم که تورفتگی‌ها و فاصله‌ها("consistent indentation") را در اینده رعایت کنید.

توجه داشته باشید که دستور if در اخر داری دونقطه می‌باشدکه بعد از ان بلوک دستورات است(با تورفتگی‌ها همچنین).

در گام بعدی بررسی می‌شود که اگر عدد گفته شده کمتر از عدد ما است به کاربر پیام می‌دهیم که باید عدد بالاتری را حدس برند.دستوری که ما در اینجا استفاده می‌کنیم elif است.که دو دستور را if else-if else با هم متصل می‌کند و به این صورت می‌شود if-elif-else.این روش برنامه‌نویسی و همچنین تعداد تورفتگی ها را کمتر می‌‌کند.

دستور elif و else همچنین باید داری دو نقطه باشند.

در دستور if می‌توان از if دیگر در داخل ان استفاده کرد به این روش ifهای تودرتو می‌گویند.

یاداوری قسمت‌ها elif و else ضروری نیست.if تنها کوتاه‌ترین روش است.

if True:
    print('Yes, it is true')

بعد از اینکه پایتون دستور if را همراه با بخش‌های elif و else اجرا کرد، پایتون به بلوک بعدی می‌رود که در داخل if است. در اینجا بلوک اصلی است(جاییکه برنامه اجرا می‌شود). در ادامه دستور print و اتمام شرط استپایان.

با اینکه این برنامه یک برنامه ساده است، به نکته‌های مهم اشاره کردم. چیزهای گفتنی گفته شد. همانطور که می‌بینید بسیار ساده است (اگر بخواهیم با پشت صحنه‌ی سی و سی‌پلاس پلاس مقایسه کنیم). دراین گام باید مفهوم این موضوع را درک کنید. بعد از تمرین این موضوع برایتان این یک امر ساده می‌شود.

نکته برای برنامه‌های سی و سی‌پلاس پلاس

در پایتون دستور switch نداریم. از دستور if..elif..else می‌توانید برای انجام همان کار‌ها نیز استفاده کنید. همچنین گاهی اوقات هم از ساختار‌داده‌ها برای انجام این کار استفاده می‌کنند.

دستور while

دستور while برای تکرار یک بلوک استفاده می‌شود، تا زمانی که شرطه گفته شده برقرار باشد. دستور while به نام looping(حلقه) همچنین می‌نامند. دستور while می‌تواند به صورت اختیاری قسمت else را داشته باشد.

برای مثال(فایلی با نام while.py ذخیره کنید)

برای مشاهده برنامه‌ها بهتر است به لینک زیر سر بزنید:

نسخه‌ی گیت‌بوک

{% include "./programs/while.py" %}

خروجی:

{% include "./programs/while.txt" %}

نحوه عملکرد

در این برنامه، ما همچنان بازی حدس زدن را انجام می‌دهیم، اما مزیت آن این است که به کاربر اجازه داده می‌شود تا زمانی که حدس درستی بزند، به حدس زدن ادامه دهد - نیازی نیست برای هر حدس برنامه را به طور مکرر اجرا کنیم، همانطور که در بخش قبلی انجام دادیم. این به خوبی استفاده از دستورwhile را نشان می‌دهد.

ورودی input و عبارات شرطی if را به داخل حلقه while‍ منتقل می‌کنیم و متغیر running را قبل از حلقه while برابر با True قرار می‌دهیم. ابتدا بررسی می‌کنیم که آیا متغیر running برابر با True است، سپس بلوک while مربوطه را اجرا می‌کنیم. پس از اجرای این بلوک، شرط دوباره بررسی می‌شود که در این حالت متغیر running است. اگر True باشد، دوباره بلوک while را اجرا می‌کنیم، در غیر این صورت، بلوک else اختیاری (در صورت وجود) را اجرا می‌کنیم و سپس به دستور بعدی ادامه می‌دهیم.

بلوک else زمانی اجرا می‌شود که شرط حلقه while برابر با False شود، این ممکن است حتی اولین باری باشد که شرط بررسی می‌شود. اگر یک عبارت ‍else برای یک حلقه while وجود داشته باشد، همیشه اجرا می‌شود مگر اینکه با استفاده از دستور break از حلقه خارج شوید.

مقادیر True و False به عنوان انواع بولین (Boolean) شناخته می‌شوند و می‌توانید آن‌ها را به ترتیب معادل مقادیر 1 و 0 در نظر بگیرید.

نکته برای برنامه‌های سی و سی‌پلاس پلاس

بخاطر داشته باشید که برای حلقه‌ی while می‌توانید از else استفاده کنید.

حلقه‌ for

جمله for..in یک عبارت حلقه‌ای دیگر است که بر روی یک دنباله از اشیاء تکرار می‌شود، یعنی از هر بخش در یک دنباله عبور می‌کند. در فصل‌های بعدی بیشتر در مورد sequences(دنباله‌ها) صحبت خواهیم کرد. چیزی که در حال حاضر باید بدانید این است که یک دنباله فقط یک مجموعه مرتب از دستورالعمل است.

مثال (فایلی با نام for.py ذخیره کنید)

{% include "./programs/for.py" %}

خروجی:

{% include "./programs/for.txt" %}

نحوه عملکرد

در این برنامه ما دنباله‌ی از اعداد را چاپ می‌کنیم. ما این دنباله را با استفاده از تابع range می‌سازیم. کاری که ما اینجا انجام می‌دهیم باید دو عدد را در نظر بگیریم برای range یک عدد برای شروع دنباله و عدد دوم برای پایان دنباله.برای مثال (range(1,5 نتیجه‌ی دنباله‌اش [1, 2, 3, 4] می‌شود.در حالت عادی گام‌های range یکی یکی است. اگر بخواهیم این را تغییر بدهیم کافی عدد سومی را به range اضافه کنیم. برای مثال (range(1,5,2 نتیجه‌ی دنباله‌‌اش [1,3] می‌شود. این نکته را در نظر داشته باشید که range(دامنه) تا عدد دوم اضافه می‌شود.

این نکته را در نظر دشته باشید که ()range هر بار یک عدد را می‌سازد. اگر شما لیست کامل را می‌خواهید باید ()list را صدا بزنید. برای مثال ((list(range(5 که نتیجه‌اش [0, 1, 2, 3, 4] میشود.list در بخش ساختار داده توضیح داده می‌شود.

حلقه‌ی for براساس این دامنه (for i in range(1,5 که همانند [for i in [1, 2, 3, 4 این دامنه است این کار را انجام می‌دهد.بدان معنی که هر عدد هر بار به ترتیب به i اضافه می‌شود.سپس دوباره به تعداد مقدار i ،بلوک for اجرا می‌شود. در این برنامه ما فقط مقدار بلوک را چاپ می‌کنیم.

به یاد داشته باشید که بخش else اختیاری است. اگر شامل این بخش باشد، این بخش پس از یک بار اجرا شدن حلقه‌ی for اجرا می‌شود به شرط انکه از << دستور ,break>> استفاده نشده باشد.

به یاد داشته باشید که حقله‌ی for..in برای هر دنباله‌ی کار می‌کند. در اینجا از range برای ساختن اعداد استفاده کردیم ولی می‌توانیم برای روش‌های دیگر نیز استفاده کنیم. در مورد این موضوع در فصول بعدی بحث خواهیم کرد.

نکته برای برنامه‌های سی ، سی‌پلاس‌پلاس، جاوا ، سی شارپ

حلقه‌ی for در پایتون از ریشه با برنامه سی و سی‌پلاس‌پلاس تفاوت دارند. ولی برنامه‌نویسان سی‌شارپ به این نکته توجه کنند که حلقه‌ی for پایتون شبیه حلقه‌ی foreachسی‌شارپ است. برای برنامه‌نویسان جاوا هم همینطور است (حلقه‌ی for (int i : IntArray) در جاوا ۱.۵).

در برنامه‌نوسی سی وسی‌پلاس‌پلاس اگر شما می‌خواستید همچین حلقه‌ی (++for (int i = 0; i < 5; i را بنویسید در پایتون کافی است این دستور را (for i in range(0,5 بنویسد. همانطور که می‌بینیدحلقه‌ی for خیلی اسان‌تر وساده‌تر شده است.همین موضوع باعث کمتر شدن خطا در پایتون می‌شود.

{#break-statement}

دستور break

دستور break برای قطع کردن حلقه و خارج شدن از حلقه استفاده می‌شود. حتی اگر در حلقه نتیجه‌اش False نباشه ویا حلقه کامل اجرا نشده باشد، با این دستور از حلقه خارج می‌شوید.

توجه داشته باشید که اگر دستور break را در حلقه‌های for یا while استفاده می‌کنید دیگر بخش else اجــرا نـــخواهد شـــد.

برای مثال (فایلی با نام break.py ذخیره کنید)

{% include "./programs/break.py" %}

خروجی:

{% include "./programs/break.txt" %}

نحوه عملکرد

در این برنامه ما دوباره از کاربر ورودی می‌گیریم و طول ورودی را هر بار محاسبه می‌کنیم. اما شرطی قرار می‌دهیم که اگر ورودی کاربر 'quit' بود از برنامه خارج شود.اینکار با استفاده از دستور breaking در حلقه انجام می‌شود.

اما طول رشته وروردی با استفاده از تابع len محاسبه می‌شود.

این نکته را هم به یاد داشته باشید که دستور break در حلقه‌ی for قابله استفاده است.

**Swaroop's : اشعار پایتون **

Programming is fun

(برنامه‌نویسی یک سرگرمیه)

When the work is done

(وقتی کار تمومه)

if you wanna make your work also fun:

(اگر می‌خواهید کارتون رو تبدیل به سرگرمی کنید:)

    use Python!

(از پایتون استفاده کنید!)

{#continue-statement}

دستور continue

دستور continue در پایتون برای نادیده گرفتن شروط در بلوک مربوطه استفاده می‌شود و دستورات بعدی را continue را اجرا می‌کند.

برای مثال(فایلی با نام continue.py ذخیره کنید)

{% include "./programs/continue.py" %}

خروجی:

{% include "./programs/continue.txt" %}

نحوه عملکرد

در این برنامه از ورودی کابر استفاده می‌کنیم. اما شرطی دارد ان هم که اگر رشته‌ی وروری کمتر ۳ کلمه طول داشته باشد و با استفاده از دستور len طول رشته را به دست می‌اوریم و اگر طول رشته کمتر سه تا بود ان موقع ما بلوک بعدی continue را نادیده میگیریم. در غیر این صورت دستور بلوک را ادامه می‌دهیم و عملیات مربوط ان بلوک را انجام می‌دهیم.

این نکته را هم در نظر داشته باشید که دستور continue در حلقه for نیز می‌توان استفاده کرد.

خلاصه

ما دیدیم که چگونه از سه دستور if، while و for همچنین break و continue استفاده کنیم. این یکی از بخش‌های که خیلی در پایتون استفاده میشود و این موضوع باعث می‌شود برنامه‌ها کمی راحت‌ترکار‌کنند.

در فصول بعدی خواهیم دید که چگونه از تابع‌ها استفاده کنیم.