Kodax

التحكم في الحلقات: break و continue والحلقات المتداخلة — أساسيات Python

التحكم في الحلقات

تعلمت for و while. في البرامج الحقيقية تحتاج أحياناً إلى إيقاف الحلقة مبكراً أو تخطي عنصر أو حلقة داخل حلقة.

break: الخروج فوراً

numbers = [4, 8, 15, 16, 23]
for n in numbers:
    if n > 10:
        print("أول رقم أكبر من 10:", n)
        break

بمجرد تنفيذ break تنتهي الحلقة ولا تُكمل بقية العناصر. مفيدة في البحث: لا داعي للاستمرار بعد إيجاد المطلوب.

continue: تخطي هذه الدورة فقط

for n in range(1, 11):
    if n % 3 == 0:
        continue      # تخطَّ مضاعفات 3
    print(n)

continue تقفز إلى الدورة التالية دون تنفيذ ما بعدها.

else مع الحلقة

الكتلة else بعد for تُنفَّذ فقط إذا انتهت الحلقة بدون break:

for n in [2, 4, 6]:
    if n % 2 != 0:
        print("وُجد فردي")
        break
else:
    print("كل الأرقام زوجية")

الحلقات المتداخلة

حلقة داخل حلقة: الداخلية تكتمل بالكامل في كل دورة من الخارجية.

for row in range(1, 4):
    for col in range(1, 4):
        print(row * col, end="\t")
    print()   # سطر جديد بعد كل صف

إذا كانت الخارجية 3 دورات والداخلية 3 دورات، يُنفَّذ الجسم الداخلي 9 مرات.

أنماط يجب أن تعرفها

| النمط | الفكرة |

|---|---|

| العدّ | متغير يبدأ بـ 0 ويزيد عند تحقق شرط |

| التجميع | متغير يبدأ بـ 0 ويُضاف إليه |

| البحث | حلقة مع break عند الإيجاد |

| الأكبر/الأصغر | احفظ أفضل قيمة وقارن بها كل عنصر |

| التصفية | أضف العناصر المطابقة لقائمة جديدة |

خطأ شائع

break داخل حلقة متداخلة تُخرج من الحلقة الداخلية فقط، لا من الاثنتين.

تمرين

لديك قائمة كلمات. اطبع أول كلمة تبدأ بحرف "م"، وإن لم توجد اطبع "لا توجد" (استخدم for-else). ثم اطبع مثلثاً من النجوم بارتفاع 5 أسطر باستخدام حلقتين متداخلتين.

# break للبحث
numbers = [4, 8, 15, 16, 23, 42]
for n in numbers:
    if n > 10:
        print("أول رقم أكبر من 10:", n)
        break

# continue للتخطي
for n in range(1, 11):
    if n % 3 == 0:
        continue
    print(n, end=" ")
print()

# for-else: هل كل الأرقام زوجية؟
for n in [2, 4, 6, 8]:
    if n % 2 != 0:
        print("وُجد رقم فردي:", n)
        break
else:
    print("كل الأرقام زوجية")

# حلقات متداخلة: جدول ضرب صغير
for row in range(1, 4):
    for col in range(1, 4):
        print(row * col, end="\t")
    print()

# نمط الأكبر
scores = [72, 95, 88, 60]
best = scores[0]
for s in scores:
    if s > best:
        best = s
print("أعلى درجة:", best)

# نمط العد والتصفية
words = ["مدرسة", "كتاب", "مكتبة", "قلم"]
count = 0
starting_with_m = []
for w in words:
    if w.startswith("م"):
        count += 1
        starting_with_m.append(w)
print(count, starting_with_m)

# مثلث نجوم
for i in range(1, 6):
    print("*" * i)
اختبر فهمك