التحكم في الحلقات: 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)
اختبر فهمك