FA-TOOLS — Header Component

آموزش حلقه for در پایتون با ۱۵ مثال واقعی

💡 نقشه راه جامع: حلقه for در پایتون در یک نگاه

  • 🔸 چیست؟ حلقه for ابزاری قدرتمند برای تکرار روی عناصر یک دنباله (لیست، رشته، تاپل، دیکشنری، ست) در پایتون.
  • 🔹 کاربرد اصلی: پیمایش و پردازش تک تک آیتم‌ها بدون نیاز به شمارنده دستی.
  • 🔑 مفاهیم کلیدی:
    • in: عملگر عضویت برای بررسی وجود عضو در دنباله.
    • range(): تابعی برای تولید دنباله‌ای از اعداد صحیح.
    • enumerate(): دسترسی به آیتم و اندیس آن همزمان.
    • zip(): تکرار روی چند دنباله به صورت همزمان.
    • break و continue: کنترل جریان حلقه.
  • 🚀 تکنیک‌های پیشرفته: List Comprehension و Nested Loops.
  • 🛠️ عیب‌یابی: مشکلات رایج و راه‌حل‌های عملی برای کدنویسی روان‌تر.
  • 💡 نکته طلایی: حلقه for در پایتون برای خوانایی و کارایی بهتر طراحی شده.


تماس با ما: 09202232789

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

🧐 حلقه for چیست و چرا به آن نیاز داریم؟

آموزش حلقه for در پایتون با ۱۵ مثال واقعی — تصویر 1

حلقه for در پایتون برای پیمایش (iteration) روی “دنباله‌ها” (Sequences) طراحی شده. منظور از دنباله می‌تونه یه لیست از اعداد، یه رشته از حروف، یه تاپل، یه مجموعه (set) یا حتی کلیدها/مقادیر یه دیکشنری باشه. برخلاف زبان‌های برنامه‌نویسی دیگه که ممکنه برای حلقه for به یه شمارنده نیاز داشته باشی (مثلاً `for i = 0; i < n; i++`)، پایتون کار رو راحت‌تر کرده. اینجا تو مستقیماً روی خود آیتم‌های دنباله تکرار می‌کنی. این موضوع هم کد رو خواناتر می‌کنه و هم خطای برنامه‌نویسی رو کاهش میده.

ساختار پایه حلقه for

ساختارش خیلی ساده‌ست:


for متغیر_تکرار در دنباله:
    # کدهایی که می‌خواهید برای هر آیتم اجرا شوند
    # متغیر_تکرار در هر دور حلقه، به یکی از آیتم‌های دنباله اشاره می‌کند

۱۵ مثال واقعی از حلقه for در پایتون

آموزش حلقه for در پایتون با ۱۵ مثال واقعی — تصویر 2

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

مثال ۱: پیمایش روی یک لیست (لیست اعداد)

ساده‌ترین و رایج‌ترین حالت.


اعداد = [10, 20, 30, 40, 50]
for عدد in اعداد:
    print(f"عدد فعلی: {عدد}")

# خروجی:
# عدد فعلی: 10
# عدد فعلی: 20
# عدد فعلی: 30
# عدد فعلی: 40
# عدد فعلی: 50

مثال ۲: پیمایش روی یک رشته (کاراکتر به کاراکتر)

رشته‌ها هم دنباله‌ای از کاراکترها هستند.


کلمه = "پایتون"
for حرف in کلمه:
    print(f"حرف: {حرف}")

# خروجی:
# حرف: پ
# حرف: ا
# حرف: ی
# حرف: ت
# حرف: و
# حرف: ن

مثال ۳: استفاده از range() (برای تکرار عددی)

اگه بخوای یه کاری رو برای یه تعداد مشخصی از دفعات انجام بدی یا روی یه محدوده عددی خاص پیمایش کنی، range() بهترین دوستته.


# از 0 تا 4 (5 عدد)
print("اعداد از 0 تا 4:")
for i in range(5):
    print(i)

# از 10 تا 14 (شروع از 10، پایان در 15-1)
print("nاعداد از 10 تا 14:")
for j in range(10, 15):
    print(j)

# از 0 تا 9 با گام 2 (اعداد زوج)
print("nاعداد زوج از 0 تا 8:")
for k in range(0, 10, 2):
    print(k)

# خروجی:
# اعداد از 0 تا 4:
# 0
# 1
# 2
# 3
# 4
#
# اعداد از 10 تا 14:
# 10
# 11
# 12
# 13
# 14
#
# اعداد زوج از 0 تا 8:
# 0
# 2
# 4
# 6
# 8

مثال ۴: پیمایش روی دیکشنری (کلیدها)

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


دانشجو = {
    "نام": "علی",
    "سن": 22,
    "رشته": "کامپیوتر"
}

print("کلیدهای دیکشنری:")
for کلید in دانشجو:
    print(کلید)

# خروجی:
# کلیدهای دیکشنری:
# نام
# سن
# رشته

مثال ۵: پیمایش روی دیکشنری (مقادیر)

با متد .values() می‌تونی فقط به مقادیر دسترسی پیدا کنی.


دانشجو = {
    "نام": "علی",
    "سن": 22,
    "رشته": "کامپیوتر"
}

print("مقادیر دیکشنری:")
for مقدار in دانشجو.values():
    print(مقدار)

# خروجی:
# مقادیر دیکشنری:
# علی
# 22
# کامپیوتر

مثال ۶: پیمایش روی دیکشنری (کلید و مقدار)

اینجا متد .items() به دادمون می‌رسه.


دانشجو = {
    "نام": "علی",
    "سن": 22,
    "رشته": "کامپیوتر"
}

print("کلید و مقدار دیکشنری:")
for کلید, مقدار in دانشجو.items():
    print(f"{کلید}: {مقدار}")

# خروجی:
# کلید و مقدار دیکشنری:
# نام: علی
# سن: 22
# رشته: کامپیوتر

مثال ۷: استفاده از enumerate() (برای دسترسی به اندیس)

خیلی وقت‌ها لازمه هم به خود آیتم و هم به اندیس (موقعیت) اون در دنباله دسترسی داشته باشی. enumerate() همین کار رو برات می‌کنه.


میوه‌ها = ["سیب", "پرتقال", "موز"]
for اندیس, میوه in enumerate(میوه‌ها):
    print(f"میوه شماره {اندیس + 1}: {میوه}")

# خروجی:
# میوه شماره 1: سیب
# میوه شماره 2: پرتقال
# میوه شماره 3: موز

مثال ۸: حلقه for با zip() (پیمایش همزمان)

اگه چند تا لیست داری و می‌خوای آیتم‌های متناظرشون رو همزمان پردازش کنی، zip() یه راه‌حل شگفت‌انگیزه.


نام‌ها = ["علی", "سارا", "رضا"]
نمرات = [18, 19, 17]

for نام, نمره in zip(نام‌ها, نمرات):
    print(f"{نام} نمره {نمره} را کسب کرد.")

# خروجی:
# علی نمره 18 را کسب کرد.
# سارا نمره 19 را کسب کرد.
# رضا نمره 17 را کسب کرد.

مثال ۹: حلقه‌های تو در تو (Nested Loops)

گاهی اوقات لازمه برای هر آیتم از یه دنباله، روی دنباله دیگه هم تکرار کنی.


لیست_اول = [1, 2]
لیست_دوم = ['a', 'b']

for عدد in لیست_اول:
    for حرف in لیست_دوم:
        print(f"ترکیب: {عدد}, {حرف}")

# خروجی:
# ترکیب: 1, a
# ترکیب: 1, b
# ترکیب: 2, a
# ترکیب: 2, b

مثال ۱۰: حلقه for با break

گاهی اوقات می‌خواییم وقتی یه شرط خاصی برقرار شد، حلقه رو کلاً قطع کنیم. break همین کار رو انجام میده.


اعداد = [1, 5, 8, 12, 15, 20]
برای_جستجو = 12

for عدد in اعداد:
    if عدد == برای_جستجو:
        print(f"عدد {برای_جستجو} پیدا شد!")
        break # حلقه قطع می‌شود
    print(f"در حال جستجو... {عدد}")

# خروجی:
# در حال جستجو... 1
# در حال جستجو... 5
# در حال جستجو... 8
# عدد 12 پیدا شد!

مثال ۱۱: حلقه for با continue

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


اعداد = [1, 2, 3, 4, 5, 6]

for عدد in اعداد:
    if عدد % 2 == 0: # اگر عدد زوج بود
        continue    # این دور حلقه را رد کن
    print(f"عدد فرد: {عدد}")

# خروجی:
# عدد فرد: 1
# عدد فرد: 3
# عدد فرد: 5

مثال ۱۲: حلقه for با else

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


اعداد = [1, 2, 3, 4]
جستجو_عدد = 5

for عدد in اعداد:
    if عدد == جستجو_عدد:
        print(f"عدد {جستجو_عدد} پیدا شد!")
        break
else:
    print(f"عدد {جستجو_عدد} در لیست پیدا نشد.")

# خروجی:
# عدد 5 در لیست پیدا نشد.

مثال ۱۳: لیست کامپرهنشن (List Comprehension) با for

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


اعداد = [1, 2, 3, 4, 5]

# ساخت لیستی از مربع اعداد
مربعات = [عدد ** 2 for عدد in اعداد]
print(f"مربعات: {مربعات}")

# ساخت لیستی از اعداد زوج (با شرط)
اعداد_زوج = [عدد for عدد in اعداد if عدد % 2 == 0]
print(f"اعداد زوج: {اعداد_زوج}")

# خروجی:
# مربعات: [1, 4, 9, 16, 25]
# اعداد زوج: [2, 4]

مثال ۱۴: پیمایش روی فایل (خط به خط)

یکی از کاربردهای فوق‌العاده for، خوندن محتویات یه فایل خط به خطه.

نکته:

برای اجرای این مثال، یک فایل به نام myfile.txt در کنار اسکریپت پایتون خود ایجاد کرده و چند خط متن داخل آن بنویسید.


# ابتدا یک فایل myfile.txt ایجاد کنید با محتوای:
# خط اول
# خط دوم
# خط سوم

with open("myfile.txt", "r", encoding="utf-8") as file:
    for خط in file:
        print(f"خوانده شده از فایل: {خط.strip()}") # strip() برای حذف کاراکترهای اضافه مثل newline

# خروجی (با فرض محتوای بالا):
# خوانده شده از فایل: خط اول
# خوانده شده از فایل: خط دوم
# خوانده شده از فایل: خط سوم

مثال ۱۵: for با ست‌ها (Set)

ست‌ها (مجموعه‌ها) هم قابل پیمایش هستند، اما چون ترتیب در ست‌ها اهمیتی نداره، نباید انتظار داشته باشی آیتم‌ها با ترتیب خاصی پردازش بشن.


میوه‌های_منحصربفرد = {"سیب", "پرتقال", "موز", "سیب"} # "سیب" تکراری حذف می‌شود

print("میوه‌های منحصربفرد:")
for میوه in میوه‌های_منحصربفرد:
    print(میوه)

# خروجی (ترتیب ممکن است متفاوت باشد):
# پرتقال
# سیب
# موز

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

آموزش حلقه for در پایتون با ۱۵ مثال واقعی — تصویر 3

خب، ۱۵ تا مثال اصلی رو دیدی. حالا می‌خوام چند تا نکته حرفه‌ای‌تر رو بهت بگم که کدنویسیت رو سریع‌تر و تمیزتر می‌کنه.

تغییر لیست در حین حلقه زدن

اگه سعی کنی لیستی رو که داری روش حلقه می‌زنی، تغییر بدی (مثلاً عنصری رو حذف یا اضافه کنی)، ممکنه با نتایج غیرمنتظره یا حتی خطا مواجه بشی. این یه مشکل رایجیه. بهترین کار اینه که:

  • راه حل ۱ (کپی کردن لیست): روی یک کپی از لیست اصلی حلقه بزن.
  • راه حل ۲ (ساخت لیست جدید): یک لیست جدید بساز و عناصر مورد نظرت رو داخل اون قرار بده (اغلب با List Comprehension).

اعداد = [1, 2, 3, 4, 5, 6]
اعداد_زوج_جدید = []

# راه حل صحیح: ساخت یک لیست جدید
for عدد in اعداد:
    if عدد % 2 == 0:
        اعداد_زوج_جدید.append(عدد)

print(f"اعداد زوج (با روش صحیح): {اعداد_زوج_جدید}")

# خروجی:
# اعداد زوج (با روش صحیح): [2, 4, 6]

یک جایگزین بسیار کارآمد برای این کار، استفاده از List Comprehension است که در مثال 13 دیدیم.

مقایسه for و while

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

ویژگی حلقه for
هدف اصلی پیمایش روی دنباله‌ها (لیست، رشته، دیکشنری و…). تعداد تکرار معمولاً مشخص است.
ساختار for item in sequence:
زمان استفاده وقتی می‌دانیم چند بار یا روی چه مجموعه‌ای باید تکرار کنیم.
مثال رایج پردازش همه عناصر یک لیست، خواندن خطوط یک فایل.
کنترل شمارنده به صورت خودکار توسط پایتون مدیریت می‌شود. (در while باید دستی مدیریت شود)

اگه به کدها و اسنیپت‌های دیگه هم نیاز داری، می‌تونی سری به مجموعه اسنیپت‌ها بزنی؛ از نکات و ترفندهای CSS گرفته تا اسنیپت‌های کاربردی جاوا اسکریپت و قالب‌های HTML آماده، همه چی پیدا میشه.

عیب‌یابی سریع: مشکلات رایج و راه‌حل‌ها

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

مشکل ۱: TypeError: 'int' object is not iterable

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

راه‌حل: اگه می‌خوای به تعداد اون عدد تکرار کنی، باید از range() استفاده کنی.


# ❌ کد اشتباه
# for i in 10:
#     print(i)

# ✅ کد صحیح
for i in range(10): # تکرار 10 بار از 0 تا 9
    print(i)

مشکل ۲: تغییر لیست در حین پیمایش (IndexError یا رفتار عجیب)

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

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


اعداد = [1, 2, 3, 4, 5, 6]
# ❌ کد اشتباه (تغییر لیست در حین حلقه)
# for عدد in اعداد:
#     if عدد % 2 == 0:
#         اعداد.remove(عدد) # این باعث از دست رفتن آیتم‌ها یا خطاهای Index می‌شود

# ✅ کد صحیح: پیمایش روی کپی یا ساخت لیست جدید
اعداد_اصلی = [1, 2, 3, 4, 5, 6]
اعداد_فرد = []
for عدد in اعداد_اصلی:
    if عدد % 2 != 0:
        اعداد_فرد.append(عدد)
print(f"اعداد فرد (با کپی): {اعداد_فرد}")

# یا با List Comprehension (بهتر و پایتونی‌تر):
اعداد_فرد_با_کامپرهنشن = [عدد for عدد in اعداد_اصلی if عدد % 2 != 0]
print(f"اعداد فرد (با List Comprehension): {اعداد_فرد_با_کامپرهنشن}")

مشکل ۳: فراموشی نقطه‌ویرگول (:) و تورفتگی (Indentation)

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

راه‌حل: همیشه بعد از خط for ... یک : بگذار و مطمئن شو که همه کدهای داخل حلقه دقیقاً به یک اندازه تورفتگی (معمولاً ۴ فاصله یا یک تب) دارند.


# ❌ کد اشتباه
# for عدد in [1, 2, 3]
# print(عدد)

# ✅ کد صحیح
for عدد in [1, 2, 3]:
    print(عدد)

نتیجه‌گیری: حلقه for، یار وفادار هر برنامه‌نویس پایتون

خب رفیق، تا اینجا حسابی با حلقه for در پایتون آشنا شدی و با ۱۵ مثال واقعی دیدی که چقدر انعطاف‌پذیر و کارآمده. از پیمایش ساده روی لیست‌ها و رشته‌ها گرفته تا کار با دیکشنری‌ها، فایل‌ها و حتی ساخت لیست‌های جدید با List Comprehension، این حلقه همه جا به دردت می‌خوره.

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

سوالات متداول (FAQ)

حلقه for در پایتون چه تفاوتی با حلقه for در زبان‌هایی مثل C++ یا جاوا دارد؟

در پایتون، حلقه for بیشتر برای پیمایش مستقیم روی عناصر یک دنباله (لیست، رشته و…) استفاده می‌شود و نیازی به تعریف یک شمارنده و مدیریت دستی آن ندارد. در حالی که در C++ یا جاوا، معمولاً با یک شمارنده و شرط پایان تعریف می‌شود (مثلاً for (int i=0; i<n; i++)).

آیا می‌توانم لیست را در حین حلقه for تغییر دهم؟

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

چه زمانی باید از range() استفاده کنم؟

از range() زمانی استفاده کنید که نیاز به تکرار یک عمل برای تعداد مشخصی از دفعات دارید، یا می‌خواهید روی یک بازه عددی خاصی تکرار کنید. اگر به خود عناصر یک دنباله نیاز دارید و نه اندیس آن‌ها، معمولا بهتر است مستقیماً روی خود دنباله حلقه بزنید.

کاربرد اصلی enumerate() چیست؟

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

Table of Contents

آخرین نوشته‌ها