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

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

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على:

  • تطبيق حلقات التكرار الشرطي المتداخلة.
  • تطبيق حلقات التكرار المحدد المتداخلة.

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

تحتوي حلقة متداخلة (nested loop) على حلقة تكرار واحدة أو أكثر ضمن جسم حلقة تكرار أخرى. يُشار إلى الحلقتين باسم حلقة خارجية (outer loop) وحلقة داخلية (inner loop). تتحكم الحلقة الخارجية في عدد مرات التنفيذ الكامل للحلقة الداخلية. يمكن أن توجد أكثر من حلقة داخلية واحدة في حلقة متداخلة.

نقطة تحقق

حلقات التكرار الشرطي المتداخلة

مثال 5.3

المواعيد المتاحة

لنتأمل جدول مواعيد عيادة طبيب. مدة كل موعد 30 دقيقة. يمكن لبرنامج يطبع المواعيد المتاحة استخدام حلقة تكرار محدد متداخلة، حيث تتكرر الحلقة الخارجية على الساعات، وتتكرر الحلقة الداخلية على الدقائق. يطبع هذا المثال الوقت بالساعات والدقائق في النطاق بين الساعة 8:00 صباحًا و 10:00 صباحًا. في هذا المثال، تتكرر الحلقة الخارجية على جزء الساعة من الوقت بين 8 و 9، وتتكرر الحلقة الداخلية على جزء الدقيقة من الوقت بين 0 و 59.

    hour = 8
    minute = 0
    while hour <= 9:
      while minute <= 59:
        print(hour, ":", minute)
        minute += 30
      hour += 1
      minute = 0

مخرجات الشِفرة أعلاه هي:

    8 : 0
    8 : 30
    9 : 0
    9 : 30

مفاهيم تطبيقية

مجموعة أسئلة حلقات التكرار الشرطي المتداخلة

1.
بالنظر إلى الشِفرة التالية، كم مرة تُنفّذ تعليمة print؟
i = 1
while i <= 5:
  j = 1
  while i + j <= 5:
    print(i, j)
    j += 1
  i += 1
  1. 5
  2. 10
  3. 25
2.
ما مخرجات الشِفرة التالية؟
i = 1

while i <= 2:
  j = 1
  while j <= 3:
    print('*', end = '')
    j += 1
  print()
  i += 1
  1. ******
    
  2. ***
    ***
    
  3. **
    **
    **
    
3.
أي برنامج يطبع المخرجات التالية؟
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
  1. i = 1
    while i <= 4:
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      print()
      i += 1
    
  2. i = 1
    while i <= 4:
      j = 1
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      print()
      i += 1
    
  3. i = 1
    while i <= 4:
      j = 1
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      i += 1
    

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

يمكن تطبيق حلقة تكرار محدد متداخلة واستخدامها بنفس طريقة حلقة تكرار شرطي متداخلة. تُعد حلقة التكرار المحدد خيارًا مفضلاً في الحالات التي تُستخدم فيها حلقة التكرار لأغراض العد باستخدام دالّة range()، أو عند التكرار على كائن حاوية، بما في ذلك الحالات المتداخلة. مثال: التكرار على قوائم متعددة للمقررات الدراسية. تتكرر الحلقة الخارجية على المقررات الدراسية المختلفة، وتتكرر الحلقة الداخلية على الأسماء في كل قائمة مقرر دراسي.

نقطة تحقق

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

مفاهيم تطبيقية

ممارسات حلقات التكرار المتداخلة

4.
بالنظر إلى الشِفرة التالية، كم مرة تُنفّذ الحلقة الخارجية؟
for i in range(3):
  for j in range(4):
    print(i, ' ', j)
  1. 3
  2. 4
  3. 12
5.
بالنظر إلى الشِفرة التالية، كم مرة تُنفّذ الحلقة الداخلية؟
for i in range(3):
  for j in range(4):
    print(i, ' ', j)
  1. 4
  2. 12
  3. 20
6.
أي برنامج يطبع المخرجات التالية؟
0 1 2 3
0 2 4 6
0 3 6 9
  1. for i in range(4):
      for j in range(4):
        print(i * j, end = ' ')
      print()
    
  2. for i in range(1, 4):
      for j in range(4):
        print(i * j)
    
  3. for i in range(1, 4):
      for j in range(4):
        print(i * j, end = ' ')
      print()
    

حلقات التكرار المختلطة

يمكن أيضًا دمج تركيبتي حلقة التكرار المحدد وحلقة التكرار الشرطي في تركيبة حلقة متداخلة. مثال: طباعة الأعداد الزوجية الأقل من عدد معين في قائمة (list). يمكن تطبيق الحلقة الخارجية باستخدام حلقة تكرار محدد تتكرر على القائمة المقدمة، وتتكرر الحلقة الداخلية على جميع الأعداد الزوجية الأقل من عدد معين من القائمة باستخدام حلقة تكرار شرطي.

    numbers = [12, 5, 3]
    
    i = 0
    for n in numbers:
      while i < n:
        print (i, end = " ")
        i += 2
      i = 0
      print()

جرّب بنفسك

طباعة مثلث من الأرقام

اكتب برنامجًا يطبع المخرجات التالية:

     1 2 3 4 5 6 7 8 9
     1 2 3 4 5 6 7 8
     1 2 3 4 5 6 7
     1 2 3 4 5 6
     1 2 3 4 5
     1 2 3 4
     1 2 3
     1 2
     1

Finish!

جرّب بنفسك

طباعة مثلثين

اكتب برنامجًا يطبع المخرجات التالية باستخدام حلقات التكرار الشرطي وحلقات التكرار المحدد المتداخلة:

    ****
    ***
    **
    *
    ++++
    +++
    ++
    +