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

كيفية عمل break لحلقات متداخلة في بايثون؟

Adam Ebrahim

السؤال

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...