Skip to content

Latest commit

 

History

History
270 lines (126 loc) · 17.1 KB

control_flow.md

File metadata and controls

270 lines (126 loc) · 17.1 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 برابر با True قبل از حلقه‌ی while قرارمی‌دهیم.در اولین گام ما بررسی می‌کنیم که ایا متغییر running برابر است با True اگر درست است به بلوک حلقه‌ی while می‌رویم.پس از انجام بلوک دوباره شرط بررسی می‌شود که در اینجا متغییر running است. اگر درست است که بلوک ااجرا می‌شود وگرنه بلوک else که اختیاری است اجرا می‌شود.بعد ان هم به فراخوانی‌ها گفته شده می‌رود.

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

به True و False نوع بولین می‌گویند و می‌توان یک جورایی با 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 استفاده کنیم. این یکی از بخش‌های که خیلی در پایتون استفاده میشود و این موضوع باعث می‌شود برنامه‌ها کمی راحت‌ترکار‌کنند.

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