جلسه ۳۰: حلقههای تودرتو در پایتون

در این درس ما حلقههای تو در تو را خواهیم ساخت.
اجرای حلقههای تودرتو
پایتون این امکان را در اختیار ما قرار داده است تا حلقه هایی را درون حلقه های دیگر به کار ببریم.فقط یک نکته وجود دارد: حلقههای داخلی همیشه قبل از حلقه بیرونی کامل میشود.
در هر تکرار حلقه بیرونی، تکرارهای حلقهی درونی به طور کامل روی توالی مشخص شده انجام میشود، بعد از این مورد حلقه بیرونی میتواند به تکرار بعدی خودش بپردازد.
طریقه استفاده حلقه تودرتو
همراه با یک مثال ببینید. فرض کنید میخواهیم حفت المانهایی را پیدا کنیم که جمعشان برابر عدد مشخص n
باشد.
سادهترین روش این است که هر کدام از المانهای لیست را با تمام اعضای لیست مقایسه کنیم. حلقه های تودرتو برای اینجا مناسب است:
n = 50
num_list = [10, 4, 23, 6, 18, 27, 47]
for n1 in num_list:
for n2 in num_list: # Now we have two iterators
if(n1 + n2 == n):
print(n1, n2)
در کدبالا، هر المان با تمام المانهای همان لیست مقایسه میشود که آیا جمع n2+n1 برابر با n
هست یا خیر. این قدرت حلقههای تودرتو است!
کلمه کلیدی break
برخی از اوقات نیازمند این هستیم که از یک حلقه، قبل از به پایان رسیدن آن، خارج شویم. این موضوع زمانی اتفاق میافتد که اگر به چیزی که نیاز داریم برسیم دیگر نیازی نباشد که ادامه تکرار ها انجام شود و ادامه کار باعث افزایش محاسبات اضافی در برنامه خواهد شد.
یک مثال خوب در این مورد، همین مثالی است که بررسی کردیم. در یک نقطه مشخص n1
برابر ۲۳ و n2
برابر ۲۷ است. در این زمان شرط ما برقرار خواهد بود.(n1+n2==0) اما حلقه ادامه کار خودش را انجام میدهد و همه جفت های دیگر را نیز بررسی میکند. این دلیلی است که جفت ها هرکدام درخروجی دوبار تکرار شده اند. خیلی خوب میشود اگر برنامه را طوری بنویسیم که اگر یک بار یک جفت چاپ شد دوباره چاپ نگردد.
این چیزی است که میتواند کاربرد break
باشد. هر زمان که ما بخواهیم، میتواند مارا از حلقه خارج کند.
حال این موضوع را به مثال بالا اضافه میکنیم:
n = 50
num_list = [10, 4, 23, 6, 18, 27, 47]
found = False # This bool will become true once a pair is found
for n1 in num_list:
for n2 in num_list:
if(n1 + n2 == n):
found = True # Set found to True
break # Break inner loop if a pair is found
if found:
print(n1, n2) # Print the pair
break # Break outer loop if a pair is found
همانطور که دیدید فقط ۲۳ و ۲۷ چاپ شده است.
به این خاطر است که این دو عدد اولین جفتی هستند که شرایط مسئله برایشان برقرار است. ما حلقه را زمانی که متغیر found
مقدار True
بگیرد، متوقف میکنیم . پس مقدار ۲۷ و ۲۳ (برعکس قبلی)برای ما چاپ نشدهاست.
کلمه کلیدی continue
اگر از کلمه continue
استفاده کنیم، در هر تکراری که باشیم ادامه دستورات حلقه اجرا نمیشود و حلقه به تکرار بعدی میرود. میتوانیم بگوییم که در این حالت حلقه به اتمام نمیرسد بلکه فقط آن تکراری که در آن قرار داریم به انتها میرسد و کدهای حلقه در آن تکرار اجرا نمیشود.
ما نیاز به جزئیات این موضوع نداریم. برای همین مثال ساده زیر را در نظر بگیرید.
num_list = list(range(0, 10))
for num in num_list:
if num == 3 or num == 6 or num == 8:
continue
print(num)
حلقه در زمان هایی که مقدار num
برابر ۳ یا ۶ یا ۸ باشد داخل if
میرود . در این زمان ها دستور continue
اجرا میشود و بقیه کد یعنی دستور print
اجرا نمیگردد و از آن عبور میشود.
کلمه کلیدی pass
در معنای عملی، عبارت pass
به این معناست که هیچ کدی برای اجرا وجود ندارد. میتوان زمانی استفاده کرد که مشخص کنیم این قسمت از کد باید بعدا نوشته بشود.
در صورتی که قطعه ای از کد را ننوشته اید اما هنوز به اجرای کل برنامه خود احتیارج دارید، این عبارت به شما کمک خواهد کرد.
num_list = list(range(20))
for num in num_list:
pass # You can write code here later on
print(len(num_list))
در درس بعدی یاد میگیریم که چگونه یک حلقه while
بسازیم.