حلقه for در پایتون
حلقه for در پایتون
حلقه for در پایتون
تا این مرحله از مسیر یادگیری، با مفاهیم پایهای مثل متغیرها، انواع دادهها، عملگرها و ساختارهای شرطی آشنا شدیم. برنامههایی که تاکنون نوشتیم، هر دستور را نهایتاً یکبار اجرا میکردند. اما در دنیای واقعی برنامهنویسی، بسیاری از کارها ماهیت تکراری دارند؛ برای مثال ارسال ایمیل به ۱۰۰۰ کاربر، پردازش پیکسلهای یک تصویر، یا جستجو در میان دادههای یک جدول.
اگر بخواهیم برای هر تکرار یک خط کد جدید بنویسیم، کدمان بسیار طولانی، کثیف و غیرقابل نگهداری میشود. اینجاست که مفهوم حلقه (Loop) وارد میدان میشود. در پایتون، یکی از مهمترین و پرکاربردترین ساختارهای تکرار، حلقه for است.

حلقه for چیست و چه ساختاری دارد؟
برخلاف برخی زبانها مثل C یا ++C که حلقه for معمولاً با شمارنده عددی ساده کار میکند، در پایتون حلقه for ابزاری برای پیمایش (Iteration) روی دنبالهها (Sequences) و مجموعهها است. یعنی پایتون بهطور خودکار روی تکتک اعضای یک مجموعه حرکت کرده و کد مورد نظر را برای هر عضو اجرا میکند.
ساختار کلی (Syntax):
for variable in sequence:
statments
# کدهایی که باید برای هر عضو اجرا شوند (با تورفتگی)
sequence: دنبالهای از دادهها که میتواند یک رشته متنی (str)، بازهای از اعداد با تابعrange()، یا ساختارهای دیگری مثل لیست باشد.variable: یک متغیر موقت که در هر دور از حلقه، مقدار یکی از اعضای دنباله را در خود نگه میدارد.- تورفتگی (Indentation): دقیقاً مانند دستورات شرطی، تمام کدهایی که داخل بدنه حلقه هستند باید ۴ فاصله (یک Tab) جلوتر نوشته شوند.
کاربردهای اصلی حلقه for:
- پیمایش کاراکترهای یک متن یا آیتمهای یک مجموعه داده.
- تکرار یک دستور به تعداد مشخص و معین (با کمک تابع
range). - اعمال پردازش و تغییر روی دادهها به صورت دستهای.
۱. حلقه for معمولی (پیمایش استاندارد)
در حالت استاندارد، حلقه از اولین عضو شروع میکند، کد درون بدنه را اجرا میکند و سپس به سراغ عضو بعدی میرود تا به پایان دنباله برسد.
یکی از بهترین توابع کمکی برای حلقه for، تابع range() است. این تابع بازهای از اعداد تولید میکند:
range(stop): اعداد را از0تا قبل ازstopتولید میکند.range(start, stop): اعداد را ازstartتا قبل ازstopتولید میکند.range(start, stop, step): با گام مشخص اعداد را تولید میکند.- صورت مسئله: مجموع اعداد زوج بین ۱ تا ۱۰ (یعنی ۲، ۴، ۶، ۸، ۱۰) را با استفاده از حلقه
forو تابعrangeمحاسبه کرده و در خروجی نمایش دهید.
# متغیری برای ذخیره مجموع اعداد
total_sum = 0
# پیمایش اعداد زوج از 2 تا 10 با گام 2
for number in range(2, 11, 2):
total_sum += number
print(f"عدد {number} اضافه شد. مجموع فعلی: {total_sum}")
print(f"مجموع نهایی اعداد زوج: {total_sum}")
۲. خروج اضطراری از حلقه با break
گاهی اوقات در حال جستجو در میان دادهها هستیم و به محض پیدا کردن نتیجه مورد نظر، دیگر نیازی نیست حلقه ادامه پیدا کند. دستور break بلافاصله اجرای حلقه را متوقف کرده و کنترل برنامه را به اولین خط بعد از بدنه حلقه منتقل میکند.
- صورت مسئله: در یک متن به دنبال حرف
'o'بگردید. به محض مشاهده اولین حرف'o'، پیام یافتن را چاپ کرده و با دستورbreakاز ادامه پیمایش کاراکترها خارج شوید.
text = "Python Developer"
print("شروع جستجوی کاراکتر...")
for char in text:
if char == 'o':
print(f"کاراکتر هدف ('{char}') پیدا شد! حلقه متوقف میشود.")
break
print(f"کاراکتر در حال بررسی: '{char}'")
print("ادامه اجرای برنامه پس از پایان حلقه.")
۳. رد کردن یک مرحله از حلقه با continue
دستور continue برعکس break، کل حلقه را متوقف نمیکند؛ بلکه فقط دور فعلی حلقه را در همان نقطه متوقف کرده و بلافاصله به دور بعدی پرش میکند. این دستور زمانی عالی است که میخواهیم برخی دادههای خاص یا نامعتبر را فیلتر کنیم و نادیده بگیریم.
- صورت مسئله: اعداد بین ۱ تا ۱۰ را بررسی کنید؛ اگر عدد مضرب ۳ بود، آن را رد کنید (چاپ نکنید) و بقیه اعداد را نمایش دهید.
print("چاپ اعداد ۱ تا ۱۰ به جز مضارب ۳:")
for num in range(1, 11):
# اگر باقیمانده تقسیم بر ۳ صفر بود، یعنی عدد مضرب ۳ است
if num % 3 == 0:
continue # دور فعلی رد شده و مستقیماً به عدد بعدی میرود
print(f"عدد معتبر: {num}")
۴. حلقههای تو در تو (Nested Loops)
حلقه تو در تو یعنی قرار گرفتن یک حلقه for درون بدنهی یک حلقه for دیگر. در این ساختار، به ازای هر یک بار اجرای حلقه بیرونی، حلقه داخلی یک دور کامل از ابتدا تا انتها اجرا میشود. این ابزار برای کار با ساختارهای دوبعدی (مانند ماتریسها، سطروستونها یا جدولها) بسیار کاربرد دارد.
- صورت مسئله: برنامهای بنویسید که با استفاده از دو حلقه تو در تو، یک جدول ضرب ساده برای اعداد ۱ تا ۳ در ۳ سطر و ۳ ستون ایجاد و نمایش دهد.
print("--- جدول ضرب ۳ در ۳ ---")
# حلقه بیرونی: شمارنده سطرها (از ۱ تا ۳)
for row in range(1, 4):
row_text = ""
# حلقه داخلی: شمارنده ستونها (از ۱ تا ۳)
for col in range(1, 4):
product = row * col
row_text += f"{row}×{col}={product}\t"
# چاپ کامل یک سطر پس از پایان حلقه داخلی
print(row_text)
فشردهسازی حلقه for با استفاده از List Comprehension
در حالت عادی، برای ساخت یک لیست جدید بر اساس یک لیست دیگر، باید ابتدا یک لیست خالی بسازیم، حلقه بزنیم و سپس با دستور append آیتمها را اضافه کنیم. اما در پایتون میتوانیم این فرآیند را در یک خط خلاصه کنیم.
۱. حالت ساده (Basic Comprehension)
در این حالت، فقط یک حلقه for ساده را داخل کروشه قرار میدهیم.
روش سنتی:
numbers = [1, 2, 3, 4, 5]
squares = []
for n in numbers:
squares.append(n**2)
print(squares) # [1, 4, 9, 16, 25]
روش فشرده (List Comprehension): [expression for item in iterable]
numbers = [1, 2, 3, 4, 5]
squares = [n**2 for n in numbers]
print(squares) # [1, 4, 9, 16, 25]
۲. استفاده از شرط (With if Condition)
میتوانیم فیلتر کردن دادهها را هم در همان خط انجام دهیم. مثلاً فقط اعداد زوج را انتخاب کنیم.
روش سنتی:
numbers = [1, 2, 3, 4, 5, 6]
evens = []
for n in numbers:
if n % 2 == 0:
evens.append(n)
print(evens) # [2, 4, 6]
روش فشرده: [expression for item in iterable if condition]
numbers = [1, 2, 3, 4, 5, 6]
evens = [n for n in numbers if n % 2 == 0]
print(evens) # [2, 4, 6]
۳. استفاده از شرط دوگانه (With if-else)
اگر بخواهیم بر اساس یک شرط، مقدار متفاوتی جایگزین کنیم (مثلاً اگر زوج بود عدد را چاپ کن، اگر فرد بود بنویس “Fard”)، ساختار کمی تغییر میکند و if-else قبل از for قرار میگیرد.
روش سنتی:
numbers = [1, 2, 3, 4, 5]
result = [] # ساخت یک لیست خالی برای ذخیره نتایج
for n in numbers:
if n % 2 == 0:
result.append(n) # اگر زوج بود، خود عدد اضافه شود
else:
result.append("Odd") # اگر فرد بود، رشته "Odd" اضافه شود
print(result) # خروجی: ['Odd', 2, 'Odd', 4, 'Odd']
روش فشرده پیشرفته: [expression_if_true if condition else expression_if_false for item in iterable]
numbers = [1, 2, 3, 4, 5]
# اگر زوج بود n را برگرد، در غیر این صورت رشته "Odd" را برگرد
result = [n if n % 2 == 0 else "Odd" for n in numbers]
print(result) # [ 'Odd', 2, 'Odd', 4, 'Odd']
نتیجه گیری
حلقه for یکی از قدرتمندترین ابزارهای پایتون برای خودکارسازی فرآیندهای تکراری و تحلیل دادهها است. با ترکیب این حلقه و کنترلکنندههای جریان مانند break و continue، تسلط کاملی روی رفتار حلقهها خواهید داشت. همچنین حلقههای تو در تو به شما این امکان را میدهند که دادههای چندبعدی را به سادگی پیمایش کنید. تمرین منظم با این ساختارها، ذهنتان را برای حل مسائل پیچیدهتر و یادگیری ساختارهای داده پیشرفته آماده میسازد.
