آموزش پایتون - حلقه‌های For

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

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

for iterating_var in sequence:
   statement(s)

در اینجا، iterating_var متغیری است که مقدار هر آیتم از دنباله در هر تکرار به آن اختصاص داده می‌شود. Statements نشان‌دهنده بلوک کدی است که می‌خواهید به صورت تکراری اجرا شود.

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

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

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

دیاگرام جریان زیر نحوه کارکرد حلقه for را نشان می‌دهد −

forloop

حلقه for در پایتون با رشته‌ها

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

مثال

مثال زیر هر کاراکتر را مقایسه کرده و در صورتی که حرف صدادار ('a', 'e', 'i', 'o', 'u') نباشد، آن را نمایش می‌دهد.

zen = '''
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
'''
for char in zen:
   if char not in 'aeiou':
      print (char, end='')

با اجرای این کد، خروجی زیر تولید خواهد شد −

Btfl s bttr thn gly.
Explct s bttr thn mplct.
Smpl s bttr thn cmplx.
Cmplx s bttr thn cmplctd.

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

شیء تاپل در پایتون نیز یک دنباله دارای اندیس است و بنابراین می‌توانید آیتم‌های آن را با یک حلقه for پیمایش کنید.

مثال

در مثال زیر، حلقه for روی یک تاپل حاوی اعداد صحیح پیمایش کرده و مجموع تمام اعداد را برمی‌گرداند.

numbers = (34,54,67,21,78,97,45,44,80,19)
total = 0
for num in numbers:
   total += num
print ("Total =", total)

با اجرای این کد، خروجی زیر تولید خواهد شد −

Total = 539

حلقه for در پایتون با لیست‌ها

شیء لیست در پایتون نیز یک دنباله دارای اندیس است و از این رو می‌توانید با استفاده از یک حلقه for روی آیتم‌های آن پیمایش کنید.

مثال

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

numbers = [34,54,67,21,78,97,45,44,80,19]
total = 0
for num in numbers:
   if num%2 == 0:
      print (num)

وقتی این کد را اجرا می‌کنید، نتیجه زیر را نشان خواهد داد −

34
54
78
44
80

حلقه for در پایتون با اشیاء Range

تابع توکار ()range در پایتون یک شیء پیمایش‌گر (iterator) برمی‌گرداند که دنباله‌ای از اعداد را تولید می‌کند. این شیء شامل اعداد صحیح از start تا stop است که با پارامتر step از هم جدا شده‌اند. شما می‌توانید حلقه for را با range نیز اجرا کنید.

سنتکس

تابع ()range دارای سنتکس زیر است −

range(start, stop, step)

که در آن:

  • Start − مقدار شروع بازه. اختیاری است و مقدار پیش‌فرض آن 0 است.

  • Stop − بازه تا مقدار stop-1 پیش می‌رود.

  • Step − اعداد صحیح در بازه به اندازه مقدار step افزایش می‌یابند. اختیاری است و مقدار پیش‌فرض آن 1 است.

مثال

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

for num in range(5):
   print (num, end=' ')
print()
for num in range(10, 20):
   print (num, end=' ')
print()
for num in range(1, 10, 2):
   print (num, end=' ')

وقتی کد بالا را اجرا می‌کنید، خروجی زیر تولید خواهد شد −

0 1 2 3 4
10 11 12 13 14 15 16 17 18 19
1 3 5 7 9

حلقه for در پایتون با دیکشنری‌ها

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

مثال

اجرای یک حلقه for ساده روی شیء دیکشنری، کلیدهای استفاده شده در آن را پیمایش می‌کند.

numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers:
   print (x)

با اجرا، این کد خروجی زیر را تولید خواهد کرد −

10
20
30
40

هنگامی که توانستیم کلید را به دست آوریم، مقدار مرتبط با آن را می‌توان به راحتی با استفاده از عملگر کروشه یا با متد ()get دسترسی پیدا کرد.

مثال

مثال زیر رویکرد ذکر شده در بالا را نشان می‌دهد.

numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers:
   print (x,":",numbers[x])

این کد خروجی زیر را تولید خواهد کرد −

10 : Ten
20 : Twenty
30 : Thirty
40 : Forty

متدهای ()items() ،keys و ()values از کلاس dict به ترتیب اشیاء نمای dict_items ،dict_keys و dict_values را برمی‌گردانند. این اشیاء پیمایش‌گر هستند و بنابراین می‌توانیم یک حلقه for روی آن‌ها اجرا کنیم.

مثال

شیء dict_items لیستی از تاپل‌های کلید-مقدار است که می‌توان یک حلقه for را روی آن به صورت زیر اجرا کرد −

numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers.items():
   print (x)

این کد خروجی زیر را تولید خواهد کرد −

(10, 'Ten')
(20, 'Twenty')
(30, 'Thirty')
(40, 'Forty')

استفاده از دستور else همراه با حلقه For

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

مثال

مثال زیر ترکیب یک دستور else با دستور for را نشان می‌دهد که اعداد اول بین 10 تا 20 را جستجو می‌کند.

#For loop to iterate between 10 to 20
for num in range(10, 20):  
   #For loop to iterate on the factors 
   for i in range(2,num): 
      #If statement to determine the first factor
      if num%i == 0:      
         #To calculate the second factor
         j=num/i          
         print ("%d equals %d * %d" % (num,i,j))
         #To move to the next number
         break 
      else:                  
         print (num, "is a prime number")
         break

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

10 equals 2 * 5
11 is a prime number
12 equals 2 * 6
13 is a prime number
14 equals 2 * 7
15 equals 3 * 5
16 equals 2 * 8
17 is a prime number
18 equals 2 * 9
19 is a prime number

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.