فصل هفتم آموزش پایتون مقدماتی - حلقه‌‌های تکرار (انتشار: 1402/08/01)

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

این چیه؟

شکل (7-1) شمای کلی حلقه‌‌ی تکرار را نشان می‌‌دهد.

 
 پایتون-شکل7-1
 

زبان برنامه‌‌نویسی پایتون، انواع حلقه‌‌ها را برای رفع نیازهای مختلف فراهم می‌‌کند. در ادامه مباحث، به توضیح آن‌‌ها خواهیم‌‌پرداخت.

7-1- حلقه‌‌ی تکرار While

یک حلقه while در این‌‌زبان، تا زمانی‌‌که شرط آن درست‌‌باشد، بلوک حلقه مربوطه را اجرا می‌‌کند. گرامر کلی آن‌‌را در شکل (7-2) مشاهده می‌‌کنیم.

پایتون-شکل2-7

 

لازم به توضیح است که در این جا، ممکن‌‌است دستورات یک خط ویا یک بلوک باشند. همچنین خود شرط درست نیز ممکن‌‌است هر عبارتِ درست ویا هر مقدار غیرصفر باشد. تا زمانی که شرط درست‌‌باشد، تکرار دستورات ادامه می‌‌یابد. به محض نادرست‌‌شدن آن، کنترل برنامه، به خط بعدی انتقال می‌‌یابد. در شکل (7-3)، شمای کلی حلقه‌‌ی while را می‌‌بینید.

پایتون-شکل3-7

 

برای درک بهتر مطلب، مثالی را در شکل (7-4) خواهید دید.

پایتون-شکل4-7

 

در این مثال، بلوک دستورات، متشکل از دستور چاپ و افزایش یک واحدی متغیر count است. تا زمانی که مقدار متغیر از عدد 9 کمتر باشد، این دستورات، بارها و بارها اجرا خواهندشد. نتیجه‌‌ی اجرای این قطعه کد را در شکل (7-5) می‌‌بینید.

پایتون-شکل5-7

 

7-1-1- حلقه‌‌ی بی‌‌نهایت

اگر در زمان استفاده از حلقه‌‌ها، احتیاط‌‌نکنید، احتمال‌‌دارد که شرط حلقه، هرگز نقض (یعنی False) نشده و تعداد تکرار حلقه، بی‌‌نهایت شود. در نتیجه، این حلقه هرگز به پایان نمی رسد. چنین حلقه‌‌هایی را حلقه‌‌ی بی‌‌نهایت می‌‌نامیم. در بعضی مواقع این حلقه‌‌ها بسیار مفید و کاربردی هستند. به عنوان مثال، زمانی که می‌‌خواهید به طور مدام اتصال بین سرویس‌‌دهنده[2] و سرویس‌‌گیرنده[3] را در شبکه بررسی نمایید، می‌‌توان از آن‌‌ها استفاده‌‌کرد. شکل (7-6) نمونه‌‌ای از این حلقه‌‌ها را نشان می‌‌دهد. همان گونه که می‌‌بینید به دلیل این که مقدار var در هیچ جایی تغییر نمی‌‌کند، این شرط به هیچ وجه نقض نمی‌‌شود.

پایتون-شکل6-7

 

برای خروج از این نوع حلقه‌‌ها، باید از کلیدهای ترکیبی CTRL+C در ویندوز و یونیکس ویا Cmnd+C در سیستم‌‌عامل مک استفاده‌‌کرد. نتیجه‌‌ی این قطعه کد و توقف ادامه‌‌ی اجرای آن را در شکل (7-7) می‌‌بینید.

پایتون-شکل7-7

 

7-1-2- استفاده از Else در حلقه‌‌ی While

برخلاف خیلی از زبان‌‌های برنامه‌‌نویسی رایج، در پایتون می‌‌توان از دستور else در کنار حلقه‌‌های تکرار استفاده‌‌کرد. زمانی که شرط حلقه، نادرست شده ویا گام‌‌های تکرار به پایان برسد، در صورت استفاده از else ، بلوک دستورات مربوط به آن اجرا می‌‌شود.

شکل (7-8)، ترکیب دستور else با دستورات دیگر را نشان می‌‌دهد. در این مثال، تا زمانی‌‌که متغیر count کمتر از 5 باشد، عدد را چاپ‌‌کرده و در غیر این صورت، دستورات مربوط به بلوک else را اجرا می‌‌کند.

پایتون-شکل8-7

 

بنابراین زمانی که این قطعه کد اجرا شود، خروجی به صورت شکل (7-9) خواهدبود.

پایتون-شکل9-7

 

7-1-3- حلقه‌‌ی while تک‌‌خطی

همانند عبارت شرطی if، اگر حلقه‌‌ی ما حاوی فقط یک خط دستور باشد، می‌‌توان سرآیند و دستور را با هم و در یک سطر داشت. به این نوع حلقه، while تک خطی می‌‌گویند. نمونه‌‌ای از آن را در شکل (7-10) می‌‌بینیم.

پایتون-شکل10-7

 

این مثال، یک حلقه‌‌ی بی‌‌نهایت را تولید می‌‌کند که برای خروج از آن بایستی کلیدهای ترکیبی ذکرشده را به کار گرفت.

7-2- حلقه‌‌ی تکرار For

این حالت از حلقه، توانایی تکرار انواع دنباله‌‌های عناصر از جمله لیست‌‌ها و رشته‌‌ها را دارد. گرامر کلی آن به صورت شکل (7-11) است.

پایتون-شکل11-7

 

اگر این دنباله، حاوی لیست تکراری باشد، در گام اول، ارزیابی می‌‌شود. سپس اولین عنصر دنباله، به متغیر تکرار‌‌کنندهاختصاص می‌‌یابد. حال، بلوک دستورات اجرا شده و هر آیتم در لیست به آن متغیر اختصاص داده‌‌ می‌‌شود. اجرای این بلوک از دستورات تا زمانی که به انتهای دنباله برسیم، ادامه می‌‌یابد. شمای کلی این حلقه را در شکل (7-12) مشاهده می‌‌کنید.

پایتون-شکل12-7

 

ادامه‌‌ی بحث را با دو مثال موجود در شکل (7-13)، ادامه می‌‌دهیم. حلقه‌‌ی اول، دنباله‌‌ای از رشته‌‌ها و دومی دنباله‌‌ای از یک لیست می‌‌باشد.

پایتون-شکل13-7

 

نتیجه‌‌ی اجرای هر دو حلقه را در شکل (7-14) مشاهده می‌‌کنید.

 پایتون-شکل14-7

 

7-2-1- تکرار با اندیس‌‌های متوالی

همان طوری که در مثال شکل (7-15) می‌‌بینیم، گاهی می‌‌توان از اندیس‌‌های یک لیست، به عنوان متغیر تکرار کننده و دنباله تکرار استفاده نمود.

پایتون-شکل15-7

 

در این مثال، تابع ( ) len نمایان‌‌گر طول لیست بوده و متغیر index هر اندیسی از این دنباله را نشان می‌‌دهد. همچنین ( ) range تابعی‌‌است که این اندیس‌‌ها را به یک دنباله‌‌ی قابل‌‌تکرار تبدیل می‌‌کند. نتیجه‌‌ اجرای این قطعه کد را در شکل (7-16) می‌‌بینیم.

پایتون-شکل16-7

 

7-2-2- استفاده از Else در حلقه‌‌ی For

همانند حلقه while، در این نوع حلقه تکرار نیز می‌‌توان از دستور else استفاده‌‌کرد. زمانی که دنباله‌‌ی حلقه به پایان رسید، در صورت استفاده از دستور else، بلوک دستورات مربوط به آن اجرا می‌‌شود.

7-3- حلقه‌‌های تکرار تو در تو

پایتون به شما اجازه می‌‌دهد تا از یک حلقه‌‌ی تکرار درون حلقه دیگر استفاده‌‌کنید. در این بخش چندین نمونه از این حلقه‌‌ها را ارائه خواهیم‌‌داد. گرامری کلی آن را به صورت مجزا برای حلقه‌‌های for و while در شکل‌‌های (7-17) و (7-18) نشان‌‌دادیم. البته لازم به ذکر است که هر دو نوع حلقه می‌‌توانند درون یکدیگر استفاده‌‌شوند. به عنوان نمونه، حلقه‌‌ی اول می‌‌تواند از نوع while و حلقه‌‌ی دوم از نوع for باشد. همچنین تعداد حلقه‌‌های تو در تو می‌‌تواند بیش از دو حلقه باشد.

پایتون-شکل17-7
 
پایتون-شکل18-7

 

برای درک بهتر این موضوع، می‌‌خواهیم با دو نوع حلقه تو در تو، مسئله انتخاب اعداد اول را حل‌‌کنیم. در شکل (7-19) با استفاده از حلقه‌‌های for اعداد اول مابین 10 تا 20 را مشخص می‌‌کنیم. همان طوری که می‌‌بینید می‌‌توان از break برای متوقف‌‌کردن حلقه استفاده‌‌نمود. نتیجه‌‌ی اجرای این قطعه کد را در شکل (7-20) می‌‌بینیم.

پایتون-شکل19-7
 
پایتون-شکل20-7

 

حال نوبت به حلقه while می‌‌رسد. مثالی را که در شکل (7-21) می‌‌بینید، اعداد اول بین 2 تا 20 را مشخص می‌‌کند.

پایتون-شکل21-7

 

نتیجه‌‌ی اجرای این قطعه کد را در شکل (7-22) می‌‌بینیم.

پایتون-شکل22-7

 

7-4- دستورات کنترلی حلقه‌‌ها

این دستورات، موجب تغییر در روند عادی دنباله‌‌ی حلقه می‌‌شوند. زبان پایتون فقط از دستورات کنترلی break، continue و pass پشتیبانی می‌‌کند. در ادامه به بررسی جزئیات آن‌‌ها خواهیم‌‌پرداخت.

7-4-1- دستور Break

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

اگر از حلقه‌‌های تو در تو استفاده می‌‌کنید، این دستور اجرای حلقه‌‌ی داخلی را متوقف‌‌کرده و خط بعدی از بلوک دستورات حلقه خارجی را اجرا می‌‌کند. شمای کلی این دستور را در شکل (7-23) مشاهده می‌‌نمایید.

پایتون-شکل23-7

 

قطعه کدی که در شکل (7-24) می‌‌بینید، دو مثال مجزا را برای استفاده از دستور break نشان می‌‌دهد. مثال اول یک حلقه‌‌ی for با دنباله‌‌ای از رشته‌‌ها بوده و دومی یک حلقه‌‌ی while می‌‌باشد.

پایتون-شکل24-7

 

نتیجه‌‌ی اجرای این مثال را در شکل (7-25) مشاهده می‌‌نمایید.

پایتون-شکل25-7

 

7-4-2- دستور Continue

این دستور، کنترل اجرا را به ابتدای حلقه باز می‌‌گرداند. دستور continue دستورات اندیس فعلی حلقه را رد کرده و کنترل را به بالای حلقه منتقل می‌‌کند. بدیهی‌‌است که این دستور، در هر دو نوع حلقه‌‌ی while و for قابل استفاده است. شمای کلی آن را در شکل (7-26) مشاهده می‌‌فرمایید.

پایتون-شکل26-7

 

شکل (7-27)، مثال break را برای دستور continue ارائه می‌‌دهد تا با بررسی این دو مثال، بهتر بتوانیم عملکرد آن‌‌ها را با هم مقایسه‌‌نماییم.

پایتون-شکل27-7

 

همان طوری که در شکل (7-28) ملاحظه می‌‌کنید بر خلاف دستور break که از ادامه تکرار حلقه‌‌ها جلوگیری می‌‌کرد، دستور continue ، تنها از اندیس فعلی چشم‌‌پوشی کرده و ادامه‌‌ی حلقه را در پیش می‌‌گیرد.

پایتون-شکل28-7

 

7-4-3- دستور Pass

اگر در نظر دارید که قطعه کد خاصی را به قسمتی از حلقه‌‌ی تکرار اضافه‌‌کنید، ولی در حال حاضر تصمیم نگرفتید که این قطعه کد، باید حاوی چه کدهایی باشد، از این دستور استفاده‌‌نمایید. به عبارت دیگر، pass یک دستور خالی بوده و اجرای آن هیچ تاثیری نخواهد داشت.

حال سوالی که مطرح می‌‌شود، این‌‌است که، اگر هیچ اتفاقی نمی‌‌افتد، به چه‌‌دلیلی همچنان قصد استفاده از آن را داریم؟ شاید جواب این سوال در شکل (7-29) باشد.

پایتون-شکل29-7

 

اگر به نتیجه‌‌ی اجرای این مثال، در شکل (7-30) توجه‌‌کنید، خواهید‌‌دید، زمانی که نوبت به حرف h می‌‌رسد، پیغام دلخواهی را چاپ می‌‌کنیم. این پیغام می‌‌تواند روشی برای خطایابی کدها ویا اطمینان از رسیدن کنترل به این قسمت از کدها باشد.

پایتون-شکل30-7

 

 

در پست بعدی به اعداد خواهیم پرداخت. با ما همراه باشین.


نظرات خوانندگان نوشته


نظری در این مورد دارید؟ خوشحال می‌شیم اون رو برامون ارسال کنید.