پایتون A تا Z : دوره کامل توسعه پایتون برای مبتدیان

حلقه ی for در پایتون (دستورات ، BREAK ، CONTINUE ، ELSE، حلقه های تو در تو ، RANGE ، INDEX)

تعریف
حلقه ها در پایتون یک روش کارآمد برای بهینه سازی کد شما و اجرای چندین دستور است.

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

در نتیجه: این باعث صرفه جویی در تلاش زیادی می شود ، و همچنین پیچیدگی کد را کاهش می دهد.

اساساً ، در زبان های برنامه نویسی دو نوع تکرار وجود دارد:

  • تکرار نامشخص: که در آن بلوک کد اجرا می شود ، تا زمانی که برخی از شرایط برآورده شود. این تکرار با استفاده از حلقه های while انجام می شود و در آموزش بعدی مورد بحث قرار می گیرد.
  • تکرار مشخص: به طور صریح و پیشاپیش تعداد تکرارها در آن مشخص شده است. این نوع تکرار با استفاده از حلقه ها (for) انجام می شود .

حلقه ها for
دستور for در پایتون با آنچه معمولاً در سایر زبان های برنامه نویسی استفاده می کنید کمی متفاوت است. به جای تکرار در یک پیشرفت عددی ، دستور for در پایتون برای موارد تکرار شونده نیز استفاده می شود: رشته ها ، فرهنگ لغت ها ، لیست ها ، مجموعه ها و تاپل ها – یا هر چیز قابل تکرار دیگر.

حلقه های for معمولاً هنگامی استفاده می شود که شما یک کد داشته باشید که می خواهید بارها تکرار کنید. دستور پایتون برای اعضای یک دنباله تکرار می شود ، سپس هر بار و به ترتیب همان بلوک را اجرا می کند.


دستورات

Python-for-Loop-Syntax

در اینجا ، یک تعریف ساده از حلقه وجود دارد ، که در آن متغیر “var” مقدار یک آیتم را در داخل دنباله و در هر تکرار می گیرد.

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

Python_Iterator

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

  •  ()iter را فرا می خواند ، تا تکرار کننده ای را بدست آورد.
  • برای بدست آوردن هر مورد از تکرار کننده ، مرتباً با ()next ارتباط برقرار می گیرد.
  • عبارت موجود در حلقه را اجرا می کند: برای هر مورد یک بار ، و متغیر را بر روی مورد مشخص قرار دهید
  • وقتی ()next با خطای StopIteration  مواجه می دهد یعنی حلقه به پایان رسیده است لذا خاتمه می یابد.

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

ابتدا لیستی از رشته ها را اعلام کنید و چند رشته به این لیست اضافه کنید. سپس ، از طریق این لیست با استفاده از عبارت تکرار می شود و هر مورد را چاپ می کنید. خیلی ساده ، درست است؟

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

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

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

این کد بسیار ساده از طریق یک لیست تکرار می شود و تک تک موارد آن لیست را چاپ می کند. این سخت نبود، مگه نه؟ بیایید به بخش بعدی برویم!

در هر مثالی که تاکنون مشاهده کرده اید ، کل عبارت حلقه برای هر تکرار اجرا می شود. همه چیز بسیار خوب است ، اما کاملاً محدود است ، درست است؟ خوشبختانه ، پایتون دو کلمه کلیدی ارائه می دهد که تکرار حلقه را زودهنگام خاتمه می دهد.


Break_Continue

break در حلقه for
break یک عبارت جریان کنترل است که به محض مواجهه با آن برای خروج از عملیات اجرا استفاده می شود. دستور break ، بلافاصله  به طور کامل یک حلقه را خاتمه می دهد . در نتیجه ، اجرای برنامه به دستورات بعدی (بعد از حلقه) می رود.

بیایید درک کنیم که چگونه می توانید با استفاده از یک مثال از دستور break در حلقه استفاده کنید.

بگذارید بگوییم شما لیستی از رشته ها به عنوان موارد دارید. به محض مواجهه با رشته مورد نظر ، می خواهید با استفاده از دستور break از حلقه خارج شوید.

در مثال فوق ، به محض مواجه شدن حلقه با نویسه ” ” ، بلوک دستور if اجرا می شود که بخاطر break بلافاصله از آن حلقه خارج می شود.

بنابراین ، فقط DIGITAL چاپ می شود. گرفتی؟

بیایید تمرین کنیم ، اکنون نوبت شماست. فرض کنید لیستی از رنگ ها دارید: [‘red’, ‘green’, ‘blue’, ‘yellow’] ، و می خواهید هر رنگی را چاپ کنید ، اما وقتی با “آبی” مواجه شد حلقه را بشکنید. چگونه پیش می روید؟ چه خروجی می گیرید؟

در اینجا یک راه حل وجود دارد. ابتدا ، بیایید لیستی را اعلام کنیم که در آن همه رنگ ها را اضافه کرده باشید  [‘red’, ‘green’, ‘blue’, ‘yellow’]. سپس ، در تمام این لیست ، با استفاده از دستور تکرار : برای رنگ در رنگ استفاده کنید. این یک تکرار کننده ایجاد می کند ، و متغیر رنگ مقدار بعدی را در هر تکرار دریافت می کند ، تا زمانی که اجرا به آخرین مورد از دنباله برسد. وقتی با مورد ‘blue’ روبرو شد ، نمی خواهید کدی را که بعدی می آید اجرا کنید ، اما از حلقه خارج شوید – اگر color == ‘blue’ باشد دستور break انجام شود. در همه موارد دیگر ، همانطور که برای عبارت “else” وجود دارد ، شما می خواهید رنگ فعلی را چاپ کنید. همانطور که حدس زده اید این حلقه ‘red’و ‘green’ را چاپ می کند و متوقف می شود زیرا مورد بعدی آبی است.

تبریک می گوییم – شما اولین حلقه خود را به تنهایی نوشتید!


continue در حلقه
بیایید کمی عمیق تر شویم ، و فرض کنید این بار نمی خواهید از حلقه خارج شوید ، بلکه فقط از تکرار در مرحله مورد نظر صرف نظر کنید و بقیه تکرارهای موارد بعدی را اجرا کنید.

دستور continue بلافاصله تکرار حلقه فعلی را خاتمه می دهد. این اجرا به بالای حلقه می پَرَد و مجدداً عبارت را ارزیابی می کند تا مشخص شود آیا این حلقه با تکرار بعدی دوباره اجرا می شود یا اینکه اولین عبارت موجود در حلقه را ادامه می دهد .

یا با کلمه کلیدی رزرو شده “break” از حل حلقه بیرون بیاید.

بیایید به همان مثالی که دیده اید ، به عبارت break نگاهی بیندازیم. اما ، به جای break ، اکنون از دستور continue استفاده خواهید کرد.

continue نیز یک دستور کنترل است ، اما تنها تفاوت این است که فقط تکرار مرحله فعلی را در حلقه رد می کند(انجام نمیدهد) و سپس با تکرار بعدی اجرا را ادامه می دهد و بقیه تکرارها را نیز تا زمانی که به آخرین آیتم دنباله برسد ، اجرا می کند .

در مثال بالا ، به محض اینکه حلقه با مورد “blue” روبرو می شود ، آن را وارد بلوک دستور if می کند ، جایی که دستور continue مورد فعلی را در حلقه رد می کند ، و سپس به تکرار بعدی ادامه می یابد ، و آیتم yellow است. این امر منجر به چاپ “red” ، “green” و “yellow” می شود باتوجه به اینکه از رنگ blue رد شده است.(یعنی از آن صرف نظر کرده است و به مرحله بعدی رفته است.)


else در حلقه ی for

خوبه اما چگونه می توان پس از دستور حلقه ، برخی از کدها را اجرا کرد و همچنان کد را تمیز و واضح نگه داشت؟

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

دو حالت وجود دارد که ممکن است حلقه به پایان برسد. اولین مورد زمانی است که مورد پیدا شده و با break مواجه می شود.

سناریوی دوم این است که حلقه بدون برخورد با عبارت break به پایان برسد.

حال ممکن است بخواهیم بدانیم کدام یک از این موارد دلیل به اتمام رسیدن یک حلقه است.

یک روش این است که یک پرچم تنظیم کنید و بعد از پایان حلقه ، آن را بررسی کنید. مورد دیگر ، استفاده از یک دستور else در انتهای حلقه است .

Python-for-Loop-Syntax

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

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


حلقه های تو در تو  برای حلقه ی for
پایتون ابتدا با حلقه بیرونی مواجه می شود و اولین مرحله ی تکرار آن را اجرا می کند. این تکرار اول باعث می شود که حلقه داخلی به طول کامل تمام مراحل تکرار را برای خودش انجام دهد.

بنابراین ، به ازای هر مرحله تکرار در حلقه ی بیرونی  ، تمام مراحل تکرار موجود در حلقی درونی انجام می می شود.


تابع  ()range

عالی! اکنون می توانید تکرارهای خود را بنویسید – سپس یک بخش کد را تکرار کنید ، تا زمانی که به آخرین مورد از لیست برسید. اما ، در بیشتر موارد ، شما می خواهید یک گروه از دستورات را برای چند بار ثابت اجرا کنید. درست؟

FOR_Range_Syntax2

خوشبختانه ، پایتون یک روش ساده برای تکرار یک عمل ، برای تعداد مشخصی از بارها ارائه می دهد: تابع ()range داخلی ، که توالی اعدادی را ایجاد می کند ، از 0 تا عدد پایانی.

FOR_Range_Syntax3

تابع range دارای سه پارامتر است که عبارتند از: پارامترهای شروع ، پایان و اندازه_گام .

می توانید هر یک از آن ها را مثل کد زیر تعریف کنید .

range(start, stop, step_size)

این تابع همه مقادیر را در حافظه ذخیره نمی کند  بنابراین پارامترهای شروع ، توقف و اندازه_گام را به خاطر می آورد . سپس شماره بعدی را برای ادامه حرکت تولید می کند.

بیایید نگاهی بیندازیم که چگونه می توان از تابع ()range  در حلقه for استفاده کرد.

در مثال بالا ، توالی از 0 شروع می شود و در 6 به پایان می رسد زیرا پارامتر پایان 7 است که شامل خود 7 نمی شود. در صورت عدم ارائه اندازه گام ، پیش فرض 1 است .

بنابراین برای اجرای هرمرحله به اندازه 1 عدد به جلو می رود که اعداد 0 تا 6 را چاپ خواهد کرد.

همانطور که ممکن است متوجه شده باشید ، تابع range به طور پیش فرض از 0 شروع می شود. اما ، می توانید با تعیین پارامتر شروع ، range را با شماره دیگری شروع کنید.

در مثال زیر این امر منجر به چاپ شماره از 2 تا 6  می شود.

همچنین می توانید طیف وسیعی از اعداد منفی را ایجاد کنید. مثال زیر منجر به چاپ اعداد از -5 تا -1 می شود ، از آنجایی که پارامتر پایان دهنده هرگز چاپ نمی شود.

سرانجام به طور پیش فرض اندازه گام تابع range  با عدد 1 افزایش می یابد . اما ، با تعیین پارامتر “اندازه گام” می توانید یک افزایش متفاوت را تعیین کنید.

در مثال زیر ، توالی از 2 شروع می شود و در 6 به پایان می رسد ، زیرا پارامتر پایان دادن 7 است  و اندازه گام 2 است.

بنابراین ، برای اجرا پس از هر بار تکرار ، 2 مرحله می پَرَد و منجر به چاپ شماره 2 و 4 و 6 می شود.


فهرست دسترسی
این چیزهای زیادی برای یادگیری است. درست است؟

خوشبختانه برای شما ، این آخرین قسمت از این آموزش است. شما دستور تکرار از طریق رشته ها ، لیست ها یا هر شئ قابل تکرار دیگر را مشاهده کرده اید.

اما ، هنوز ایده ای ندارید: چگونه شماره عضویت مربوطه به هر عضو را بدست آوریم؟

می توانید از تابع ()range در حلقه ها برای تکرار توالی اعداد استفاده کنید.

به علاوه ، می توان آن را با تابع ()len  ترکیب کرد ، و از این طریق می توانید داخل شئ عملیات مورد نظر را  انجام دهید. به این ترتیب می توانید موقعیت دقیق مورد فعلی را در لیست دریافت کنید.

عالی است! گرچه ، در بیشتر موارد مشابه مثال بالا ، از تابع ()enumerate می شود که همان نتیجه خروجی را نتیجه میدهد با این تفاوت که راحت است و دستور نوشتن کد خود را ساده می کنید.

در واقع ، تابع ()enumerate ، تاپل tuple را فراهم می کند که می توانید سپس آن را باز کنیدو هم شماره عضویت مورد و هم مقدار آن مورد را بدست آورید.

در پایین مثالی آورده شده است که همان نتیجه کد قبلی را دارد.


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

در آموزش بعدی ، یک عبارت حلقه دیگر خواهید یافت: ساختار while

ساختار while تکرار یک عبارت یا مجموعه ای از عبارات را تا رسیدن به برخی از شرایط تکرار می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا