Table of Contents
توقف و ادامه در حلقهها با `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` و `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 # ورودی درست است؛ از حلقه خارج شواینجا:
- اگر ورودی نامعتبر باشد، با
continueدوباره میرویم ابتدای حلقه. - وقتی ورودی معتبر شد، با
breakاز حلقه خارج میشویم.
اشتباهات رایج با `break` و `continue`
چند نکته که معمولاً برای مبتدیها مشکلساز میشود:
- فراموش کردن بهروزرسانی متغیر در
whileقبل ازcontinue
میتواند حلقه را بیانتها کند. - انتظار اینکه
breakهمهٔ حلقههای تو در تو را بشکند
breakفقط حلقهای را متوقف میکند که در همانجا قرار دارد، نه حلقههای بیرونی. - استفادهٔ بیرویه از
breakوcontinue
گاهی میشود با طراحی بهتر شرط حلقه (مثلاً درwhile) نیاز به چندینbreak/continueرا کم کرد و کد را خواناتر نوشت.
جمعبندی
breakبرای خارج شدن کامل از حلقه استفاده میشود.continueبرای رد کردن بقیهٔ دستورات همین تکرار و رفتن به تکرار بعدی استفاده میشود.- هر دو در حلقههای
forوwhileکاربرد دارند. - در حلقههای
whileمراقب باشید قبل ازcontinueمتغیرهای شرط را بهروزرسانی کنید تا حلقهٔ بینهایت ایجاد نشود.
این دو ابزار باعث میشوند حلقههایتان منعطفتر و خواناتر شوند، مخصوصاً وقتی شرایط توقف یا رد کردن بعضی تکرارها پیچیدهتر است.