آموزش پایتون, پایتون مقدماتی

دستورهای break، continue و pass در پایتون؛ کنترل حلقه‌ها

دستورهای break، continue و pass در پایتون؛ کنترل حلقه‌ها

🗓 آخرین به‌روزرسانی:

حلقه‌ها به ما اجازه می‌دهند یک کار را بارها تکرار کنیم؛ اما در برنامه‌های واقعی همیشه نمی‌خواهیم حلقه تا آخرین مرحله ادامه پیدا کند. گاهی جواب را پیدا کرده‌ایم و باید فوراً از حلقه خارج شویم، گاهی می‌خواهیم یک مورد خاص را نادیده بگیریم و سراغ بعدی برویم، و گاهی فقط به یک «جای خالی» در کد نیاز داریم. پایتون برای این سه موقعیت سه دستور ساده دارد: break، continue و pass.

این درس ادامه آموزش‌های حلقه for در پایتون و حلقه while در پایتون از دوره رایگان آموزش پایتون از صفر است.

دستور break؛ خروج فوری از حلقه

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

numbers = [4, 9, 15, 22, 7, 30]

for n in numbers:
    if n > 20:
        print(f"First number above 20: {n}")
        break
    print(f"Checked {n}")

print("Loop finished")

خروجی:

Checked 4
Checked 9
Checked 15
First number above 20: 22
Loop finished

با اینکه ۷ و ۳۰ هنوز در لیست بودند، بعد از پیدا شدن ۲۲ دیگر بررسی نشدند. این کار در لیست‌های بزرگ باعث صرفه‌جویی در زمان اجرا می‌شود.

break در حلقه while True

رایج‌ترین کاربرد break در حلقه‌های بی‌نهایت while True است؛ حلقه تا وقتی کاربر دستور خروج ندهد ادامه پیدا می‌کند:

while True:
    command = input("Enter a command (q to quit): ").strip().lower()
    if command == "q":
        print("Goodbye!")
        break
    print(f"You entered: {command}")

این الگو پایه منوهای متنی، بازی‌ها و ربات‌هاست. در پروژه بازی حدس عدد با پایتون هم از همین روش برای پایان بازی پس از حدس درست استفاده شده است.

دستور continue؛ رد شدن از تکرار فعلی

continue حلقه را تمام نمی‌کند؛ فقط بقیه کدهای همین دور را اجرا نمی‌کند و مستقیم سراغ دور بعدی می‌رود.

for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i, end=" ")

# 1 3 5 7 9

هر بار که i زوج است، continue اجرا می‌شود و print نادیده گرفته می‌شود.

مثال کاربردی: نادیده گرفتن داده نامعتبر

raw_scores = ["18", "abc", "15", "", "20", "-3"]
valid = []

for item in raw_scores:
    if not item.isdigit():
        print(f"Skipped invalid value: {item!r}")
        continue
    valid.append(int(item))

print(f"Valid scores: {valid}")
print(f"Average: {sum(valid) / len(valid):.2f}")

خروجی:

Skipped invalid value: 'abc'
Skipped invalid value: ''
Skipped invalid value: '-3'
Valid scores: [18, 15, 20]
Average: 17.67

متد isdigit() را در درس متدهای رشته دیدیم و قالب :.2f را در درس f-string در پایتون. continue باعث شد کد اصلی بدون تو در تو شدن شرط‌ها تمیز باقی بماند.

مراقب continue در حلقه while باشید

اگر شمارنده حلقه while بعد از continue افزایش پیدا کند، حلقه بی‌نهایت می‌شود:

# Wrong: infinite loop when i == 3
i = 0
while i < 5:
    if i == 3:
        continue
    print(i)
    i += 1

# Correct: update the counter before continue
i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)   # 1 2 4 5

دستور pass؛ دستوری که هیچ کاری نمی‌کند

در پایتون بدنه if، حلقه، تابع یا کلاس نمی‌تواند خالی باشد. وقتی هنوز کد آن بخش را ننوشته‌اید ولی ساختار برنامه را می‌خواهید، pass را به‌عنوان جای‌نگه‌دار می‌گذارید:

def send_email(user):
    pass  # TODO: implement later

class Product:
    pass

for n in range(5):
    if n == 2:
        pass  # nothing special for 2 yet
    else:
        print(n)

بدون pass با خطای IndentationError: expected an indented block روبه‌رو می‌شوید. تفاوت مهم: pass روی جریان حلقه هیچ اثری ندارد و اجرای خطوط بعدی را متوقف نمی‌کند؛ در حالی که continue به دور بعد می‌پرد.

مقایسه break، continue و pass

دستورکاربعد از اجراکاربرد رایج
breakپایان کامل حلقهاولین خط بعد از حلقهپیدا شدن جواب، دستور خروج کاربر
continueرد شدن از دور فعلیشروع دور بعدینادیده گرفتن داده نامعتبر
passهیچ کاریخط بعدی همان بلوکجای‌نگه‌دار کد ناتمام

break در حلقه‌های تو در تو

break فقط نزدیک‌ترین حلقه را تمام می‌کند، نه همه حلقه‌ها را:

for i in range(1, 4):
    for j in range(1, 4):
        if j == 2:
            break
        print(f"i={i}, j={j}")

# i=1, j=1
# i=2, j=1
# i=3, j=1

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

def find_pair(target):
    for i in range(1, 10):
        for j in range(1, 10):
            if i * j == target:
                return i, j
    return None

print(find_pair(12))  # (2, 6)

بخش else در حلقه‌ها

یک ویژگی کمتر شناخته‌شده پایتون این است که حلقه‌های for و while می‌توانند else داشته باشند. بلوک else فقط وقتی اجرا می‌شود که حلقه بدون break تمام شده باشد:

n = 29

for d in range(2, n):
    if n % d == 0:
        print(f"{n} is not prime (divisible by {d})")
        break
else:
    print(f"{n} is prime")

# 29 is prime

اگر مقسوم‌علیهی پیدا شود، break اجرا می‌شود و else نادیده گرفته می‌شود. این الگو برای «جستجو و گزارش پیدا نشدن» بسیار تمیزتر از تعریف یک متغیر پرچم است.

مثال جامع: سیستم ورود با سه بار فرصت

PASSWORD = "python123"
attempts = 3

while attempts > 0:
    entered = input("Password: ")
    if entered == "":
        print("Empty input is not counted, try again.")
        continue
    if entered == PASSWORD:
        print("Welcome!")
        break
    attempts -= 1
    print(f"Wrong password. {attempts} attempt(s) left.")
else:
    print("Account locked.")

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

اشتباهات رایج

  • استفاده از break بیرون از حلقه: خطای SyntaxError: 'break' outside loop می‌دهد؛ برای خروج از تابع از return استفاده کنید.
  • اشتباه گرفتن pass با continue: pass چیزی را رد نمی‌کند و خطوط بعدی همان دور اجرا می‌شوند.
  • انتظار خروج از همه حلقه‌ها با یک break: فقط داخلی‌ترین حلقه تمام می‌شود.
  • حلقه بی‌نهایت با continue: در while شمارنده را قبل از continue به‌روز کنید.

تمرین

  1. از کاربر عدد بگیرید و جمع آن‌ها را حساب کنید تا وقتی که عدد ۰ وارد شود (با break).
  2. عددهای ۱ تا ۵۰ را چاپ کنید، به‌جز مضرب‌های ۷ (با continue).
  3. با for ... else بررسی کنید آیا کلمه‌ای که کاربر وارد می‌کند در یک لیست وجود دارد یا نه.

📌 همچنین بخوانید: بازار کار پایتون در ایران، نصب و تنظیم پایتون در VS Code و برنامه‌نویسی پایتون با گوشی

سؤالات متداول

تفاوت break و continue در پایتون چیست؟

break کل حلقه را تمام می‌کند، اما continue فقط باقی‌مانده دور فعلی را رد می‌کند و حلقه با دور بعدی ادامه پیدا می‌کند.

چطور از دو حلقه تو در تو با هم خارج شویم؟

بهترین راه قرار دادن حلقه‌ها در یک تابع و استفاده از return است. روش دیگر استفاده از یک متغیر پرچم (مثلاً found = True) و بررسی آن در حلقه بیرونی است.

آیا pass روی سرعت برنامه اثر دارد؟

خیر. pass عملاً هیچ هزینه‌ای ندارد و فقط برای درست بودن ساختار کد استفاده می‌شود.

جمع‌بندی

با break حلقه را زودتر تمام می‌کنیم، با continue از یک دور رد می‌شویم و با pass یک بلوک خالی اما معتبر می‌سازیم. همچنین دیدیم break فقط نزدیک‌ترین حلقه را متوقف می‌کند و else حلقه فقط در صورت تمام شدن بدون break اجرا می‌شود. این دستورها را در پروژه‌هایی مثل بازی حدس عدد به کار ببرید تا کاملاً در ذهنتان بنشینند.

درس قبلی: قالب‌بندی رشته با f-string در پایتون

بازگشت به فهرست کامل دوره آموزش پایتون از صفر

می‌خواهی پیشرفتت ذخیره شود؟با ورود یا ثبت‌نام رایگان، درس‌های تمام‌شده را علامت بزن و درصد پیشرفتت را در حساب کاربری ببین.ورود / ثبت‌نام برای ذخیره پیشرفت
درس بعدی · دوره رایگان پایتون (مقدماتی) (12 از 16)لیست‌ها در پایتون؛ ساخت، دسترسی و تغییر عناصر ←
آموزش‌های تازه، کد آماده و رفع خطاهر هفته در کانال Dev Source؛ رایگان.
🧭 مسیر یادگیری پایتون از صفر
ماژول 3: شرط و حلقه — درس 12 از 44

برای ذخیره پیشرفت در همه دستگاه‌ها و دریافت گواهی پایان مسیر، رایگان ثبت‌نام کن یا وارد شو.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *