آموزش حلقه در پایتون و ترفندهای Python Loop

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

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

برای انجام تمام این‌گونه کارها می‌توان از حلقه‌ها (Python Loops) کمک گرفت. حلقه‌ها یکی از پر کاربردترین دستورات کنترلی هستند. (مستندات Python Control Flow)

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

در زبان برنامه نویسی پایتون دو نوع اصلی حلقه داریم:

  • حلقه while
  • حلقه for

هر کدام از این Loopها در جای خاص خود کاربرد دارند ولی کار اصلی هر دو تقریباً مشابه است.

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

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

بعضاً نیاز است در ابتدای کار یک یا چند متغیر مورد نیاز را مقداردهی اولیه کنیم. سپس یک شرط برای حلقه تعریف می‌کنیم.

مادامی که آن شرط برقرار باشد، قطعه کد درون محدوده حلقه اجرا خواهد شد. پس از هر بار اجرای کد، مجدداً شرط مورد نظر چک می‌شود. هر زمان که شرط برقرار نبود، از حلقه خارج شده و ادامه برنامه اجرا خواهد شد.

دیاگرام کلی حلقه‌ها در زبان‌های برنامه‌نویسی
دیاگرام کلی حلقه‌ها در زبان‌های برنامه‌نویسی

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

با استفاده از حلقه while می‌توان مجموعه‌ای از کدها را تا زمانی که شرط مورد نظرمان برقرار است اجرا کرد.

ساختار (نحو یا syntax) حلقه while در پایتون به شکل زیر است:

while condition:
    #code

condition همان شرط ماست که خروجی آن باید به صورت True یا False باشد.

فرض کنید متغیری به نام i داریم. می‌خواهیم تا زمانی که مقدار آن از عدد 5 کمتر است، مقدارش را چاپ کنیم. به قطعه کد زیر دقت کنید:

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

شرط حلقه while را i<5 تعریف کردیم. در بدنه حلقه، مقدار متغیر را چاپ کرده و در نهایت مقدار آن را یک واحد افزایش داده‌ایم.

اگر در آخرین خط، مقدار متغیر را افزایش ندهیم، حلقه ما تا بی‌نهایت اجرا خواهد شد.

در این‌گونه مواقع معمولاً گفته می‌شود به حلقه بی‌نهایت یا Infinitive Loop برخورد کرده‌ایم!

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

1
2
3
4
گرفتن ورودی در پایتون با تابع input

گرفتن ورودی در پایتون با تابع input

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

حلقه for که به حلقه for in در پایتون هم معروف است بیشتر برای پیمایش (Traversal) استفاده می‌شود.

فرض کنید یک تاپل در python دارید. این تاپل یک نوع توالی از اعضای خودش به ما می‌دهد. اگر بخواهیم روی تک تک این اعضا حرکت یا به اصطلاح پیمایش کنیم، از حلقه for استفاده خواهیم کرد.

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

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

for Value in Sequence:
    #execution and use of Value

سینتکس حلقه for دارای سه بخش اصلی است:

  • Value: نام متغیری که در هر بار اجرای حلقه، هر کدام از اعضای مجموعه در آن قرار می‌گیرد.
  • Sequence: همان مجموعه قابل پیمایش مورد نظر ماست.
  • بدنه حلقه: کدهایی که در هر بار اجرای حلقه پردازش می‌شوند.

فرض کنید یک لیست داریم که حاوی اسم پنج نفر است. با استفاده از کد زیر عملیات پیمایش در لیست را انجام می‌دهیم:

names = ["Nazanin", "Mehran", "Omid", "Melisa", "sina"]
for name in names:
    print("Hello " + name + "!")

خروجی اجرای این حلقه به صورت زیر خواهد بود:

نتیجه اجرای مثال حلقه for پایتون
نتیجه اجرای مثال حلقه for پایتون

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

string = "Welcome to SabzDanesh.com site!"
i = 0
for char in string:
    i+=1

print("Lenght is: " + str(i))

در قطعه کد بالا، با استفاده از حلقه for تعداد کاراکترهای رشته string را محاسبه کردیم.

به کمک تکرارگرها در پایتون می‌توانید یک شئ قابل پیمایش در حلقه‌های python به دلخواه خود ایجاد کنید.

تابع range

فرض کنید می‌خواهیم یک حلقه for ایجاد کنیم که متغیر آن در هر بار اجرا، یکی افزایش پیدا کند. چیزی شبیه به کاری که در حلقه while داشتیم.

فرض کنید می‌خواهیم با یک حلقه، حاصل جمع اعداد 1 تا 9 را محاسبه کنیم.

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

nums= [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = 0
for n in nums:
    result += n

print(result)

اما راه‌حل ساده‌تری هم داریم!

تابع range() یک لیست از اعداد صحیح ایجاد می‌کند. از این تابع می‌توان به طور مستقیم در حلقه for در پایتون برای تولید یک رنج از اعداد (بازه عددی) استفاده کرد.

کد زیر دقیقاً معادل کد بالا بوده و عدد 45 را به عنوان نتیجه به ما می‌دهد.

result = 0
for i in range(10):
    result += i

print(i)

تابع range(n) به ما لیستی از اعداد 0 تا n-1 را می‌دهد.

از این تابع می‌توان به صورت حرفه‌ای‌تر هم استفاده کرد. ساختار کلی آن به صورت زیر است:

range(start, stop, step)

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

  • start: نقطه شروع شمارش
  • stop: نقطه پایانی (این نقطه جزء توالی عددی نخواهد بود)
  • step: گام حرکت از شروع تا پایان (اختیاری، پیش‌فرض عدد 1 در نظر گرفته می‌شود)

اگر فقط یک ورودی برای range() وارد شود، به طور پیش‌فرض مقدار شروع برابر 0 و گام برابر 1 خواهد بود.

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

range(9)
# [0, 1, 2, 3, 4, 5, 6, 7, 8]

range(5, 21)
# [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

range(5, 21, 3)
# [5, 8, 11, 14, 17, 20]

توجه داشته باشید که محدوده کدهای بدنه حلقه در پایتون بر اساس همان دندانه‌گذاری (یا Indentation) مشخص می‌شود.

ترفندهای کار با حلقه

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

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

در ادامه دو دستور break و continue در حلقه‌ها و ساختار Nested Loops را بررسی می‌کنیم.

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

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

بعد از آن که به عدد مورد نظر رسیدیم چه اتفاقی می‌افتد؟! باید به طور کامل از حلقه (for یا while) خارج شویم!

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

به محض رسیدن به دستور break بلافاصله از حلقه خارج شده و تکرارهای بعدی نادیده گرفته خواهد شد؛ بدون توجه به این که در اولین تکرار حلقه هستیم یا آخرینِ آن!

معمولاً این‌گونه کارها به کمک ساختارهای شرط در پایتون انجام می‌شود.

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in lst:
    if i == 5:
        break
    print(i)

# Result:
# 1
# 2
# 3
# 4

خروجی این قطعه کد، فقط اعداد 1 تا 4 هستند.

استفاده از دستور continue

در همان مثال قبلی، اگر فقط بخواهیم یک عدد خاص چاپ نشود باید چه کاری انجام داد؟

اولین راه‌حل احتمالاً استفاده از شرط است. به این صورت که اگر عنصر انتخاب شده برابر 5 نبود، دستور print اجرا شود.

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

به قطعه کد زیر دقت کنید:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in lst:
    if i == 5:
        continue
    print(i)

نتیجه اجرای این کد به صورت زیر خواهد شد:

مثال دستور continue در حلقه پایتون
مثال دستور continue در حلقه پایتون

همان‌طور که می‌بینید به غیر از عدد 5، بقیه اعداد لیست در خروجی چاپ شده‌اند.

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

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

mtrx = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = 0
for i in mtrx:
    for j in i:
        x += j

print(x) #45
کار با فایل در پایتون

کار با فایل در پایتون