فصل هفتم آموزش پایتون مقدماتی - حلقههای تکرار (انتشار: 1402/08/01)
گاهی اوقات میخواهیم یک بلوک کد را چندین بار به صورت پشت سر هم اجرا ویا تکرار نماییم. با وجود تفاوت در جزئیات اجرای حلقههای تکرار در زبانهای مختلف، به طور کلی ساختار آنها به گونه است که بعد از بررسی شرط، در صورت درستی، خط اول و سپس خطوط بعدی اجرا میشوند. زمانی که شرط، نادرستشد، اجرای آن متوقف خواهدشد.
شکل (7-1) شمای کلی حلقهی تکرار را نشان میدهد.
زبان برنامهنویسی پایتون، انواع حلقهها را برای رفع نیازهای مختلف فراهم میکند. در ادامه مباحث، به توضیح آنها خواهیمپرداخت.
7-1- حلقهی تکرار While
یک حلقه while در اینزبان، تا زمانیکه شرط آن درستباشد، بلوک حلقه مربوطه را اجرا میکند. گرامر کلی آنرا در شکل (7-2) مشاهده میکنیم.
لازم به توضیح است که در این جا، ممکناست دستورات یک خط ویا یک بلوک باشند. همچنین خود شرط درست نیز ممکناست هر عبارتِ درست ویا هر مقدار غیرصفر باشد. تا زمانی که شرط درستباشد، تکرار دستورات ادامه مییابد. به محض نادرستشدن آن، کنترل برنامه، به خط بعدی انتقال مییابد. در شکل (7-3)، شمای کلی حلقهی while را میبینید.
برای درک بهتر مطلب، مثالی را در شکل (7-4) خواهید دید.
در این مثال، بلوک دستورات، متشکل از دستور چاپ و افزایش یک واحدی متغیر count است. تا زمانی که مقدار متغیر از عدد 9 کمتر باشد، این دستورات، بارها و بارها اجرا خواهندشد. نتیجهی اجرای این قطعه کد را در شکل (7-5) میبینید.
7-1-1- حلقهی بینهایت
اگر در زمان استفاده از حلقهها، احتیاطنکنید، احتمالدارد که شرط حلقه، هرگز نقض (یعنی False) نشده و تعداد تکرار حلقه، بینهایت شود. در نتیجه، این حلقه هرگز به پایان نمی رسد. چنین حلقههایی را حلقهی بینهایت مینامیم. در بعضی مواقع این حلقهها بسیار مفید و کاربردی هستند. به عنوان مثال، زمانی که میخواهید به طور مدام اتصال بین سرویسدهنده[2] و سرویسگیرنده[3] را در شبکه بررسی نمایید، میتوان از آنها استفادهکرد. شکل (7-6) نمونهای از این حلقهها را نشان میدهد. همان گونه که میبینید به دلیل این که مقدار var در هیچ جایی تغییر نمیکند، این شرط به هیچ وجه نقض نمیشود.
برای خروج از این نوع حلقهها، باید از کلیدهای ترکیبی CTRL+C در ویندوز و یونیکس ویا Cmnd+C در سیستمعامل مک استفادهکرد. نتیجهی این قطعه کد و توقف ادامهی اجرای آن را در شکل (7-7) میبینید.
7-1-2- استفاده از Else در حلقهی While
برخلاف خیلی از زبانهای برنامهنویسی رایج، در پایتون میتوان از دستور else در کنار حلقههای تکرار استفادهکرد. زمانی که شرط حلقه، نادرست شده ویا گامهای تکرار به پایان برسد، در صورت استفاده از else ، بلوک دستورات مربوط به آن اجرا میشود.
شکل (7-8)، ترکیب دستور else با دستورات دیگر را نشان میدهد. در این مثال، تا زمانیکه متغیر count کمتر از 5 باشد، عدد را چاپکرده و در غیر این صورت، دستورات مربوط به بلوک else را اجرا میکند.
بنابراین زمانی که این قطعه کد اجرا شود، خروجی به صورت شکل (7-9) خواهدبود.
7-1-3- حلقهی while تکخطی
همانند عبارت شرطی if، اگر حلقهی ما حاوی فقط یک خط دستور باشد، میتوان سرآیند و دستور را با هم و در یک سطر داشت. به این نوع حلقه، while تک خطی میگویند. نمونهای از آن را در شکل (7-10) میبینیم.
این مثال، یک حلقهی بینهایت را تولید میکند که برای خروج از آن بایستی کلیدهای ترکیبی ذکرشده را به کار گرفت.
7-2- حلقهی تکرار For
این حالت از حلقه، توانایی تکرار انواع دنبالههای عناصر از جمله لیستها و رشتهها را دارد. گرامر کلی آن به صورت شکل (7-11) است.
اگر این دنباله، حاوی لیست تکراری باشد، در گام اول، ارزیابی میشود. سپس اولین عنصر دنباله، به متغیر تکرارکنندهاختصاص مییابد. حال، بلوک دستورات اجرا شده و هر آیتم در لیست به آن متغیر اختصاص داده میشود. اجرای این بلوک از دستورات تا زمانی که به انتهای دنباله برسیم، ادامه مییابد. شمای کلی این حلقه را در شکل (7-12) مشاهده میکنید.
ادامهی بحث را با دو مثال موجود در شکل (7-13)، ادامه میدهیم. حلقهی اول، دنبالهای از رشتهها و دومی دنبالهای از یک لیست میباشد.
نتیجهی اجرای هر دو حلقه را در شکل (7-14) مشاهده میکنید.
7-2-1- تکرار با اندیسهای متوالی
همان طوری که در مثال شکل (7-15) میبینیم، گاهی میتوان از اندیسهای یک لیست، به عنوان متغیر تکرار کننده و دنباله تکرار استفاده نمود.
در این مثال، تابع ( ) len نمایانگر طول لیست بوده و متغیر index هر اندیسی از این دنباله را نشان میدهد. همچنین ( ) range تابعیاست که این اندیسها را به یک دنبالهی قابلتکرار تبدیل میکند. نتیجه اجرای این قطعه کد را در شکل (7-16) میبینیم.
7-2-2- استفاده از Else در حلقهی For
همانند حلقه while، در این نوع حلقه تکرار نیز میتوان از دستور else استفادهکرد. زمانی که دنبالهی حلقه به پایان رسید، در صورت استفاده از دستور else، بلوک دستورات مربوط به آن اجرا میشود.
7-3- حلقههای تکرار تو در تو
پایتون به شما اجازه میدهد تا از یک حلقهی تکرار درون حلقه دیگر استفادهکنید. در این بخش چندین نمونه از این حلقهها را ارائه خواهیمداد. گرامری کلی آن را به صورت مجزا برای حلقههای for و while در شکلهای (7-17) و (7-18) نشاندادیم. البته لازم به ذکر است که هر دو نوع حلقه میتوانند درون یکدیگر استفادهشوند. به عنوان نمونه، حلقهی اول میتواند از نوع while و حلقهی دوم از نوع for باشد. همچنین تعداد حلقههای تو در تو میتواند بیش از دو حلقه باشد.
برای درک بهتر این موضوع، میخواهیم با دو نوع حلقه تو در تو، مسئله انتخاب اعداد اول را حلکنیم. در شکل (7-19) با استفاده از حلقههای for اعداد اول مابین 10 تا 20 را مشخص میکنیم. همان طوری که میبینید میتوان از break برای متوقفکردن حلقه استفادهنمود. نتیجهی اجرای این قطعه کد را در شکل (7-20) میبینیم.
حال نوبت به حلقه while میرسد. مثالی را که در شکل (7-21) میبینید، اعداد اول بین 2 تا 20 را مشخص میکند.
نتیجهی اجرای این قطعه کد را در شکل (7-22) میبینیم.
7-4- دستورات کنترلی حلقهها
این دستورات، موجب تغییر در روند عادی دنبالهی حلقه میشوند. زبان پایتون فقط از دستورات کنترلی break، continue و pass پشتیبانی میکند. در ادامه به بررسی جزئیات آنها خواهیمپرداخت.
7-4-1- دستور Break
همانند break سنتی و قدیمی در زبان برنامهنویسی C، ایندستور، حلقه فعلی را خاتمهداده و دستور بعدی را اجرا میکند. رایجترین استفاده آن، برای شکستن تکرار حلقه بر اساس یک شرط دیگر است. به عبارت دیگر زمانی که بخواهیم با درستی یک شرط، از ادامه حلقه جلوگیریکنیم، میتوان از دستور break استفادهکرد.
اگر از حلقههای تو در تو استفاده میکنید، این دستور اجرای حلقهی داخلی را متوقفکرده و خط بعدی از بلوک دستورات حلقه خارجی را اجرا میکند. شمای کلی این دستور را در شکل (7-23) مشاهده مینمایید.
قطعه کدی که در شکل (7-24) میبینید، دو مثال مجزا را برای استفاده از دستور break نشان میدهد. مثال اول یک حلقهی for با دنبالهای از رشتهها بوده و دومی یک حلقهی while میباشد.
نتیجهی اجرای این مثال را در شکل (7-25) مشاهده مینمایید.
7-4-2- دستور Continue
این دستور، کنترل اجرا را به ابتدای حلقه باز میگرداند. دستور continue دستورات اندیس فعلی حلقه را رد کرده و کنترل را به بالای حلقه منتقل میکند. بدیهیاست که این دستور، در هر دو نوع حلقهی while و for قابل استفاده است. شمای کلی آن را در شکل (7-26) مشاهده میفرمایید.
شکل (7-27)، مثال break را برای دستور continue ارائه میدهد تا با بررسی این دو مثال، بهتر بتوانیم عملکرد آنها را با هم مقایسهنماییم.
همان طوری که در شکل (7-28) ملاحظه میکنید بر خلاف دستور break که از ادامه تکرار حلقهها جلوگیری میکرد، دستور continue ، تنها از اندیس فعلی چشمپوشی کرده و ادامهی حلقه را در پیش میگیرد.
7-4-3- دستور Pass
اگر در نظر دارید که قطعه کد خاصی را به قسمتی از حلقهی تکرار اضافهکنید، ولی در حال حاضر تصمیم نگرفتید که این قطعه کد، باید حاوی چه کدهایی باشد، از این دستور استفادهنمایید. به عبارت دیگر، pass یک دستور خالی بوده و اجرای آن هیچ تاثیری نخواهد داشت.
حال سوالی که مطرح میشود، ایناست که، اگر هیچ اتفاقی نمیافتد، به چهدلیلی همچنان قصد استفاده از آن را داریم؟ شاید جواب این سوال در شکل (7-29) باشد.
اگر به نتیجهی اجرای این مثال، در شکل (7-30) توجهکنید، خواهیددید، زمانی که نوبت به حرف h میرسد، پیغام دلخواهی را چاپ میکنیم. این پیغام میتواند روشی برای خطایابی کدها ویا اطمینان از رسیدن کنترل به این قسمت از کدها باشد.
در پست بعدی به اعداد خواهیم پرداخت. با ما همراه باشین.
نظرات خوانندگان نوشته
نظری در این مورد دارید؟ خوشحال میشیم اون رو برامون ارسال کنید.