اذهب إلى المحتوى

السؤال

نشر

لدي عدة حلقات متداخلة وأريد أن أقوم بإيقاف الحلقة الخارجية عند تحقيق شرط ما، لكن المشكلة أن الحلقة الداخلية هي ما تتوقف:

for i in range(5):
  for n in range(5):
    if i == 5: break # أريد هنا أن يتم إيقاف الحلقة الخارجية
      print(i, n)

 

Recommended Posts

  • 1
نشر

هناك العديد من الطرق لعمل ذلك مثل

وضع شرط كعلم flag 

flag = False
for i in range(5):
  if flag:break
  for n in range(5):
    if i == 4 and n ==5:
        flag = true
    print(i, n)

إرسال إستثناء

try:
    for i in range(5):
        for n in range(5):
            if i == 5:
                raise StopIteration
            print(i, n)
except StopIteration:
    pass

تفحص نفس الحالة مرةً أخرى

for i in range(5):
    for n in range(5):
        if n == 5:
            break
        print(i, n)
    if n == 5:
        break

إستخدام صيغة for و else

for i in range(5):
    for n in range(5):
        if n == 5:
            break
        print(i, n)
    else:  
        continue
    break

وضعها في دالة

def check_sth():
    for i in range(5):
        for n in range(5):
            if n == 5:
                return
            print(i, n)
check_sth() # تشغيل عند الحاجة

 

  • 0
نشر

يمكننا إيقاف الحلقتين سوياً، بعدة طرق،

  • استخدام Product التي تقوم على الجداء الديكارتي لقائمتين وتمر على الناتج بحلقة واحدة، هنا تعليمة break واحدة تكسر الحلقة:
from itertools import product

for x, y in product(range(10), range(10)):
    if y == : break
  • أو نضع الحلقتين ضمن دالة و نستخدم تعليمة return:
def myLoops():
    for i in range(10):
        for j in range(10):
            print(...)
            if j == 5:
                return
myLoops()
  •  يمكن عمل متغير بولياني Boolean يقوم بكسر الحلقة الخارجية حيث يتم اختباره بعد الخروج من الحلقة الداخلية، حيث نغير قيمته إلى Ture مثلا:
myBreak = false

for i in range(5):
    for n in range(5):
        if i == 5:
            myBreak = true
            break 
        print(i, n)
	if myBreak : break  # هنا نخرج من الحلقة الخارجية

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...