حلقه های while و for در پایتون

حلقه های while و for در پایتون

حلقه ها در پایتون

در زبان پایتون دو نوع حلقه (loop) داریم:

  • حلقه های while
  • حلقه های for

حلقه while

با استفاده از حلقه های While می توانیم تا زمانی که شرطی برقرار باشد کدهایی را اجرا کنیم. بگذارید یک مثال برایتان بزنم؛ در کد زیر گفته ایم تا زمانی که i از عدد 6 کوچک تر باشد متغیر i را چاپ کن:

i = 1
while i < 6:
  print(i)
  i += 1

خروجی:

1
2
3
4
5

نکته: همانطور که می بینید در پایان هر حلقه (پس از چاپ شدن) یک عدد به متغیر i اضافه می کنیم تا عدد آن افزایش یابد در غیر این صورت روی همان 1 باقی می ماند و از آنجایی که 1 همیشه کمتر از 6 است برنامه در یک حلقه ی بی نهایت گیر خواهد کرد!

بنابراین یا می توانید صبر کنید که کار حلقه تمام شود و یا می توانید از break استفاده کنید؛ هر کجا که از کلیدواژه ی break استفاده کنید حلقه در آن قسمت متوقف خواهد شد:

i = 1
while i < 6:
  print(i)
  if (i == 3):
    break
  i += 1

خروجی:

1
2
3

کلیدواژه ی continue شباهت هایی با کلیدواژه ی break دارد اما یک تفاوت اصلی میان آن ها است؛ break تمام حلقه را از اجرا در می آورد و دیگر حلقه اجرا نمی شود اما continue فقط همان دور حلقه (iteration) را رد میکند اما دور های بعدی اجرا خواهند شد. به طور مثال:

i = 0
while i < 6:
  i += 1
  if i == 3:
    continue
  print(i)

خروجی:

1
2
4
5
6

توجه کنید که عدد 3 در خروجی ما وجود ندارد چرا که با continue از آن رد شدیم.

یک ترفند جالب دیگر این است که حلقه ی while را با کلیدواژه ی else ترکیب کنیم تا پس از تمام شدن اجرای حلقه دستورات دیگری را نیز انجام دهیم. به مثال زیر توجه کنید:

i = 1
while i < 6:
  print(i)
  i += 1
else:
  print("i is no longer less than 6")

خروجی:

1
2
3
4
5
i is no longer less than 6

حلقه ی For

از حلقه ی For معمولا برای گردش (iterate کردن) در یک توالی یا مجموعه استفاده می شود مانند list ها و tuple ها و dictionary ها و حتی رشته ها و ... بنابراین شباهت کمتری به for در زبان های برنامه نویسی دیگر دارد، بلکه بیشتر شبیه به یک متد گردشی (iterator) است که در زبان های شیء گرا استفاده می شود. با استفاده از for می توانیم برای هر عضو/آیتم در یک مجموعه، دستورات خاصی را اجرا کنیم. یک مثال بسیار ساده را در اینجا می بینید:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  print(x)

خروجی:

apple
banana
cherry

در این کد x یک حرف فرضی است که نماینده ی تک تک اعضای موجود در متغیر fruit می باشد.

همانطور که گفتم می توانید با استفاده از for درون رشته ها نیز گردش کنید! چرا؟ به این دلیل که رشته ها نیز اشیاء قابل گردش هستند. اگر دقت کنید هر رشته یک مجموعه از حروف مختلف است. به طور مثال:

for x in "banana":
  print(x)

خروجی:

b
a
n
a
n
a

همانطور که با استفاده از break از حلقه ی While خارج شدیم، می توانیم از حلقه ی for نیز خارج شویم:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  print(x) 
  if x == "banana":
    break

خروجی:

apple
banana

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

توجه داشته باشید که موقعیت قرار گیری break بسیار مهم است. مثلا در مثال بالا آن را بعد از print قرار داده ایم بنابراین خود banana چاپ شده و سپس از حلقه خارج می شویم اما اگر آن را قبل از print قرار دهیم خود banana هم چاپ نمی شود:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  if x == "banana":
    break
  print(x)

خروجی فقط کلمه ی apple خواهد بود.

همچنین کلیدواژه ی continue نیز مانند حلقه ی while در حلقه های for قابل استفاده است:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  if x == "banana":
    continue
  print(x)

خروجی:

apple
cherry

تابع ()range

تابع ()range زمانی استفاده می شود که بخواهیم درون کد های مشخصی به تعداد دفعات مشخصی گردش کنیم. ()range توالی از اعداد را برمی گرداند که به صورت پیش فرض از صفر شروع شده و با هر گردش 1 واحد به آن اضافه می شود. مثال:

for x in range(6):
  print(x)

خروجی:

0
1
2
3
4
5

به عبارت ساده تر کد print به تعداد 6 بار تکرار می شود، البته خود 6 را شامل نمی شود (شروع از صفر است).

در حالت عادی شروع ()range از صفر است اما ما می توانیم شروع را خودمان تغییر دهیم:

for x in range(2, 6):
  print(x)

خروجی:

2
3
4
5

همچنین ()range به صورت پیش فرض در هر گردش 1 واحد به مقدار قبلی اضافه می کند اما ما می توانیم تعداد واحد های اضافه شده در هر گردش را نیز تغییر دهیم:

for x in range(2, 30, 3):
  print(x)

خروجی:

2
5
8
11
14
17
20
23
26
29

در کد بالا از عدد 2 تا 30 را سه تا سه تا جلو رفته ایم.

استفاده از else و حلقه های تو در تو

با ترکیب کلیدواژه ی else با حلقه ی for می توانیم پس از اتمام حلقه یک بلوکه ی کد خاص را اجرا کنیم:

for x in range(6):
  print(x)
else:
  print("Finally finished!")

خروجی:

0
1
2
3
4
5
Finally finished!

همچنین می توانیم حلقه های for را درون یکدیگر قرار بدهیم که به آن nested loop می گویند. در این حالت حلقه ی بیرونی outer loop و حلقه ی درونی inner loop نام خواهد داشت:

adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]

for x in adj:
  for y in fruits:
    print(x, y)

خروجی:

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

بحث حلقه ها در پایتون نیز به اتمام رسید و شما باید تسلط خوبی نسبت به این بحث پیدا کرده باشید. مطمئن باشید که با چند بار تمرین می توانید به راحتی مبحث حلقه ها در پایتون را به خاطر بسپارید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری از مقدماتی تا پیشرفته با پایتون توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.