Kahibaro
Discord Login Register

break و continue

توقف و ادامه در حلقه‌ها با `break` و `continue`

در این بخش می‌بینیم چطور می‌توانیم وسط اجرای یک حلقه:

این دو دستور در کنترل جریان حلقه‌ها (هم for و هم while) بسیار مهم‌اند.

دستور `break`: شکستن حلقه

break باعث می‌شود حلقه همان لحظه متوقف شود؛ مهم نیست شرط حلقه هنوز برقرار است یا نه.

الگو:

while شرط:
    ...
    if شرط_متوقف_کردن:
        break
    ...

یا:

for آیتم in مجموعه:
    ...
    if شرط_متوقف_کردن:
        break
    ...

مثال: پیدا کردن اولین عدد منفی در لیست

numbers = [3, 5, 7, -2, 10, -5]
for n in numbers:
    if n < 0:
        print("اولین عدد منفی:", n)
        break  # همین‌جا حلقه تمام می‌شود

اگر break را برمی‌داشتیم، همهٔ اعداد بررسی و نمایش می‌شدند. این‌جا ما فقط «اولین» عدد منفی را می‌خواهیم.

مثال: حلقهٔ `while` و `break` برای خروج زودتر

count = 0
while count < 10:
    print("count =", count)
    if count == 3:
        print("خارج شدن زودهنگام از حلقه")
        break
    count = count + 1
print("بعد از حلقه")

هرچند شرط حلقه count < 10 است، با رسیدن به count == 3 از حلقه خارج می‌شویم.

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

اگر حلقه‌ها تو در تو (داخل هم) باشند، break فقط نزدیک‌ترین حلقه‌ای که در آن نوشته شده را می‌شکند:

for i in range(3):        # حلقهٔ بیرونی
    for j in range(5):    # حلقهٔ داخلی
        if j == 2:
            break         # فقط حلقهٔ داخلی متوقف می‌شود
        print("i =", i, ", j =", j)

حلقهٔ بیرونی (for i in range(3)) همچنان ادامه می‌دهد و اجرای حلقهٔ داخلی را دوباره از j = 0 شروع می‌کند.

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

چه زمانی از `break` استفاده کنیم؟

مثال سادهٔ منو:

while True:
    command = input("یک دستور وارد کنید (exit برای خروج): ")
    if command == "exit":
        print("خدانگهدار!")
        break
    print("شما نوشتید:", command)

اینجا از while True (حلقهٔ بی‌نهایت) استفاده کرده‌ایم و با break از آن خارج می‌شویم.


دستور `continue`: پرش به دور بعدی حلقه

continue برعکس break حلقه را متوقف نمی‌کند؛ فقط باعث می‌شود:

الگو:

for آیتم in مجموعه:
    ...
    if شرط_پرش:
        continue  # برو به تکرار بعدی
    ...

یا:

while شرط:
    ...
    if شرط_پرش:
        continue
    ...

مثال: چاپ فقط اعداد فرد با `continue`

for n in range(1, 11):
    if n % 2 == 0:   # اگر عدد زوج است
        continue     # این دور را رد کن
    print(n)         # فقط برای اعداد فرد اجرا می‌شود

خروجی:
۱، ۳، ۵، ۷، ۹

برای اعداد زوج، بعد از رسیدن به continue، خط print(n) اجرا نمی‌شود.

مثال: رد کردن خط‌های خالی در ورودی کاربر

while True:
    text = input("متن وارد کنید (quit برای خروج): ")
    if text == "quit":
        break
    if text == "":   # رشته خالی
        continue     # این تکرار را نادیده بگیر
    print("شما نوشتید:", text)

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

مثال: `continue` در `while` و اهمیت به‌روزرسانی متغیر

در حلقه‌های while باید حواسمان باشد که قبل از continue متغیری که در شرط حلقه استفاده شده، به‌روزرسانی شود؛ وگرنه ممکن است به حلقهٔ بی‌نهایت برسیم.

اشتباه:

i = 0
while i < 5:
    if i == 2:
        continue  # اشتباه: i هیچ‌وقت تغییر نمی‌کند
    print(i)
    i = i + 1

وقتی i == 2 شود، به continue می‌رسیم، i زیاد نمی‌شود و دوباره همان شرط تکرار می‌شود؛ در نتیجه در مقدار ۲ گیر می‌افتیم.

نسخهٔ درست:

i = 0
while i < 5:
    if i == 2:
        i = i + 1  # قبل از continue مقدار را تغییر بده
        continue
    print(i)
    i = i + 1

مقایسهٔ `break` و `continue`

برای روشن شدن تفاوت، این دو نمونه حلقه را ببینیم.

مثال با `break`

for n in range(1, 6):
    if n == 3:
        break
    print(n)

خروجی:

1
2

در n == 3 حلقه کاملاً تمام می‌شود و دیگر عددی چاپ نمی‌شود.

مثال با `continue`

for n in range(1, 6):
    if n == 3:
        continue
    print(n)

خروجی:

1
2
4
5

فقط تکراری که در آن n == 3 است، نادیده گرفته می‌شود.

پس به‌طور خلاصه:

الگوهای رایج استفاده از `break` و `continue`

۱. جست‌وجو در یک لیست تا پیدا شدن نتیجه (استفاده از `break`)

names = ["Ali", "Sara", "Reza", "Nima"]
target = "Reza"
for name in names:
    if name == target:
        print("پیدا شد:", name)
        break

۲. فیلتر کردن داده‌ها (استفاده از `continue`)

numbers = [10, -5, 0, 3, -2, 8]
for n in numbers:
    if n < 0:
        continue  # اعداد منفی را نادیده بگیر
    print("عدد غیر منفی:", n)

۳. تکرار تا ورودی صحیح (ترکیب `while True` و `break`)

while True:
    age_text = input("سن خود را وارد کنید: ")
    if not age_text.isdigit():
        print("لطفاً فقط عدد وارد کنید.")
        continue  # برگرد و دوباره بپرس
    age = int(age_text)
    print("سن شما:", age)
    break  # ورودی درست است؛ از حلقه خارج شو

اینجا:

اشتباهات رایج با `break` و `continue`

چند نکته که معمولاً برای مبتدی‌ها مشکل‌ساز می‌شود:

  1. فراموش کردن به‌روزرسانی متغیر در while قبل از continue
    می‌تواند حلقه را بی‌انتها کند.
  2. انتظار این‌که break همهٔ حلقه‌های تو در تو را بشکند
    break فقط حلقه‌ای را متوقف می‌کند که در همان‌جا قرار دارد، نه حلقه‌های بیرونی.
  3. استفادهٔ بی‌رویه از break و continue
    گاهی می‌شود با طراحی بهتر شرط حلقه (مثلاً در while) نیاز به چندین break/continue را کم کرد و کد را خواناتر نوشت.

جمع‌بندی

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

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!