آموزش پایتون از صفر تا … (قسمت ۶) – iterator و loop در پایتون

آموزش پایتون
آموزش پایتون

با درود مجدد، سربازی شدیدا درگیرم کرده و نمیرسم بلاگ رو بروز نگه دارم 😐 و اما بریم سر اصل بحث، تو این قسمت از آموزش در مورد loopو iterator در پایتون باهاتون صحبت می کنم.

من بحث رو به صورت خیلی مبتدی پیش نمیبرم که در برنامه نویسی ما گاهی اوقات نیاز به تکرار داریم و … (فرضمون بر این هست که حداقل با یه زبان برنامه نویسی یا مفاهیم مبتدی برنامه نویسی آشنایی دارید)

در زبان برنامه نویسی پایتون ما دو تا loop داریم :

  • For Loop
  • While Loop

ابتدا به For می پردازیم :

سینتکس for در پایتون به شکل زیر است

for i in iterable_object:
   # do something

توجه : تو رفتگی هر چه که درون یه For یا While نوشته می شود باید یکسان باشد، در غیر این صورت با ارور SyntaxError مواجه خواهید شد. به یه مثال دیگه می پردازیم :

primes = [2, 3, 5, 7]
for prime in primes:
    print(prime)

خروجی قطعه کد بالا باید به صورت زیر باشد :

2
3
5
7

تابع range(a, b) : دنباله ای از اعداد صحیح a، a+1 ، a+2 ، … ، b ، b-2، b-1 را بر می گرداند. برای مثال :

for i in range(1, 10):
    print(i)

خروجی قطعه کد فوق به صورت زیر می شود:

1
2
3
4
5
6
7
8
9

یا می توان از تابع range با تنها یک آرگومان استفاده کرد:

for i in range(5):
        print(i)

خروجی به شکل زیر می شود:

0
1
2
3
4

تابع range(a, b) دارای پارامتر سوم دلخواهی نیز هست که سایز هر گام را مشخص می کند، برای مثال :

for i in range(1, 20, 2):
    print(i)

خروجی مورد انتظار به شکل زیر می باشد:
1
3
5
7
9
11
13
15
17
19

فلوچارت For Loopبه صورت زیر می باشد:

For Loop

در ادامه چند تا مثال پیچیده تر را می بینید:

>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     if len(w) > 6:
...         words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']

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

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
...     print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb

در مثال فوق نیز به ترکیب range() و len() در فهرست های یک دنباله پرداخته شده است.

دستورات break و continue و else در Loop ها :

به مثال زیر توجه کنید :

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

خب همانطور که می بینید عبارت else متعلق به Forهست نه if.

else وقتی که break رخ بدهد اجرا نمی شود، بلکه زمانی که loop به آخرش برسد اجرا می شود. پس elseدر loop زمانی رخ می دهد که break ای رخ نداده باشد. مانند else که در tryاستفاده میشه و زمانی که exception رخ نداده باشد اجرا می شود.

دستور continueنیز از زبان c قرض گرفته شده است. هز وقت به continue برسیم تکرار بعدی اجرا می شود:

>>> for num in range(2, 10):
...     if num % 2 == 0:
...         print("Found an even number", num)
...         continue
...     print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9

While Loop :

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

x = 3                              
while x < 10:
    print(x)
    x = x + 1

همچنین می توانید حلقه نامحدود while بسازید :

while True:
    print('Forever')

و اما فلوچارت حلقه whileبه شکل زیر است:

یه تعداد مثال بیشتر که مفاهیم بیشتری درونشون هست :

count = 0
 
while count < 10:
    count += 1
    if count == 5:
         break    
    print("inside loop", count)
 
 
print("out of while loop")
حتمن تکه کد بالا را اجرا و خروجی اش را ببینید :) و همچنین تکه کد پایین را :
count = 0
 
while count < 10:
    count += 1
    if count % 2 == 0:
           continue
    print(count)

یه مثال کلاسیک از استفاده while نیز تولید دنباله فیبوناچی هست :

a, b = 0, 1
while b < 100:
    print(b)
    a, b = b, a + b

یا استفاده در چاپ های طرحدار، به مثال زیر توجه کنید و خروجیش رو خودتون تو کنسولتون حتما ببینید:

row = int(input("Enter the number of rows: "))
n = row
while n >= 0:
    x =  "*" * n
    print(x)
    n -= 1