برمجة بايثون 2026 — جامعة هلسنكي › الجزء 3: الحلقات 3 / 15 السابق التالي

المزيد عن الحلقات

أهداف التعلّم

بعد إتمام هذا القسم

  • ستفهم متى يحتاج الأمر break إلى الخروج من الحلقات
  • ستتمكّن من استخدام الأمر continue للانتقال إلى التكرار التالي
  • ستفهم كيف تعمل الحلقات المتداخلة

الأمر break

لقد صادفتَ الأمر break من قبل. ويمكن استخدامه لإيقاف تنفيذ حلقة فورًا. ومن الأمثلة النموذجية على استخدامه حالة يطلب فيها البرنامج مُدخَلًا من المستخدم ولا ينتهي التنفيذ إلا حين يتلقى مُدخَلًا محدَّدًا.

يمكن بلوغ الوظيفة نفسها دون الأمر break، باستخدام شرط مناسب. فكلا البرنامجين أدناه يطلب من المستخدم كتابة أعداد، ويحسب مجموعها إلى أن يكتب المستخدم العدد -1.

# 1st version using the break command

sum = 0

while True:
    number = int(input("Please type in a number, -1 to exit: "))
    if number == -1:
        break
    sum += number

print (f"The sum is {sum}")
# 2nd version without the break command

sum = 0
number = 0

while number != -1:
    number = int(input("Please type in a number, -1 to exit: "))
    if number != -1:
        sum += number

print (f"The sum is {sum}")

يطبع كلا البرنامجين الشيء نفسه عند المُدخَلات نفسها، مثلًا:

Please type in a number, -1 to exit: **2**
Please type in a number, -1 to exit: **4**
Please type in a number, -1 to exit: **5**
Please type in a number, -1 to exit: **3**
Please type in a number, -1 to exit: **-1**
The sum is 14

إذًا، البرنامجان متطابقان عمليًا من حيث الوظيفة. لكن الطريقة الأولى غالبًا أسهل، لأن الشرط number == -1 لا يظهر سوى مرة واحدة، ولا يلزم تهيئة المتغيّر number خارج الحلقة.

يمكن أيضًا استخدام الأمر break مع شرط مناسب معًا داخل حلقة while. فمثلًا، تتكرر الحلقة التالية ما دام مجموع الأعداد لا يتجاوز 100، لكنها تتوقف أيضًا إذا كتب المستخدم العدد -1.

sum = 0

while sum <= 100:
    number = int(input("Please type in a number, -1 to exit: "))
    if number == -1:
        break
    sum += number

print (f"The sum is {sum}")

بعض أمثلة تنفيذ البرنامج:

Please type in a number, -1 to exit: **15**
Please type in a number, -1 to exit: **8**
Please type in a number, -1 to exit: **21**
Please type in a number, -1 to exit: **-1**
The sum is 44
Please type in a number, -1 to exit: **15**
Please type in a number, -1 to exit: **8**
Please type in a number, -1 to exit: **21**
Please type in a number, -1 to exit: **45**
Please type in a number, -1 to exit: **17**
The sum is 106

في المثال الأول يتوقف تنفيذ الحلقة لأن المستخدم يكتب العدد -1. وفي المثال الثاني يتوقف التنفيذ لأن مجموع الأعداد يتجاوز 100.

وكما هو الحال دائمًا في البرمجة، هناك طرق كثيرة للوصول إلى الوظيفة نفسها. والبرنامج التالي متطابق مع البرنامج السابق من حيث الوظيفة:

sum = 0

while True:
    number = int(input("Please type in a number, -1 to exit: "))
    if number == -1:
        break
    sum += number
    if sum > 100:
        break

print (f"The sum is {sum}")

الأمر continue

هناك طريقة أخرى لتغيير كيفية تنفيذ حلقة وهي الأمر continue. فهو يجعل تنفيذ الحلقة يقفز مباشرة إلى بدايتها، حيث يقع شرط الحلقة. ثم يتابع التنفيذ بشكل طبيعي مع فحص الشرط:

3_3_1.png

فمثلًا، يجمع البرنامج التالي الأعداد المُدخَلة، لكنه يضمّ سوى الأعداد الأصغر من 10. فإذا كان العدد 10 أو أكبر، يقفز التنفيذ إلى بداية الحلقة ولا يُضاف العدد إلى المجموع.

sum = 0

while True:
    number = int(input("Please type in a number, -1 to exit: "))
    if number == -1:
        break
    if number >= 10:
        continue
    sum += number

print (f"The sum is {sum}")
Please type in a number, -1 to exit: **4**
Please type in a number, -1 to exit: **7**
Please type in a number, -1 to exit: **99**
Please type in a number, -1 to exit: **5**
Please type in a number, -1 to exit: **-1**
The sum is 16

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

كما تمامًا مع جمل if، يمكن أيضًا وضع الحلقات داخل حلقات أخرى. فمثلًا، يستخدم البرنامج التالي حلقة لطلب الأعداد من المستخدم. ثم يستخدم حلقة أخرى داخل الأولى لطباعة عدّ تنازلي بدءًا من العدد المُعطى وصولًا إلى 1:

while True:
    number = int(input("Please type in a number: "))
    if number == -1:
        break
    while number > 0:
        print(number)
        number -= 1
Please type in a number: **4**
4
3
2
1
Please type in a number: **3**
3
2
1
Please type in a number: **6**
6
5
4
3
2
1
Please type in a number: **-1**

عندما تكون هناك حلقات متداخلة، لا يؤثر الأمران break وcontinue إلا على الحلقة الداخلية الأكثر عمقًا التي ينتميان إليها. ويمكن كتابة المثال السابق أيضًا هكذا:

while True:
    number = int(input("Please type in a number: "))
    if number == -1:
        break
    while True:
        if number <= 0:
            break
        print(number)
        number -= 1

وهنا لا يوقف الأمر break الأخير سوى الحلقة الداخلية، وهي الحلقة المستخدَمة لطباعة الأعداد.

متغيّرات مساعدة أخرى مع الحلقات

لقد استخدمنا متغيّرات مساعدة، التي تزيد أو تنقص مع كل تكرار للحلقة، مرات عديدة من قبل، لذا ينبغي أن يبدو البرنامج التالي مألوفًا إلى حدٍّ كبير من حيث البنية. وهو يطبع جميع الأعداد الزوجية الأكبر من الصفر حتى يبلغ حدًّا يحدده المستخدم:

limit = int(input("Please type in a number: "))
i = 0
while i < limit:
    print(i)
    i += 2
Please type in a number: **8**
0
2
4
6

يُضبط المتغيّر المساعد i على 0 قبل الحلقة، ويزداد بمقدار اثنين مع كل تكرار.

يتطلب استخدام الحلقات المتداخلة أحيانًا متغيّرًا مساعدًا منفصلًا للحلقة الداخلية. ويطبع البرنامج أدناه «هرمًا من الأعداد» بناءً على عدد يحدّه المستخدم:

number = int(input("Please type in a number: "))
while number > 0:
    i = 0
    while i < number:
        print(f"{i} ", end="")
        i += 1
    print()
    number -= 1
Please type in a number: **5**
0 1 2 3 4
0 1 2 3
0 1 2
0 1
0

في هذا البرنامج تستخدم الحلقة الخارجية المتغيّر المساعد number، الذي ينقص بمقدار 1 مع كل تكرار حتى يبلغ 0. أمّا المتغيّر المساعد i فيُضبط على 0 قبل الدخول إلى الحلقة الداخلية مباشرة، في كل مرة تتكرر فيها الحلقة الخارجية.

وتستخدم الحلقة الداخلية المتغيّر المساعد i، الذي يزيد بمقدار 1 مع كل تكرار من تكرارات الحلقة الداخلية. وتتكرر الحلقة الداخلية حتى تصير i مساويةً لـnumber، وتطبع كل قيمة لـi على السطر نفسه، مفصولةً بمحرف مسافة. وحين تنتهي الحلقة الداخلية، يبدأ الأمر print في الحلقة الخارجية سطرًا جديدًا.

وتذكّر الآن أن قيمة number تنقص مع كل تكرار من تكرارات الحلقة الخارجية، لذا تنقص أيضًا عدد مرات تكرار الحلقة الداخلية. ومع كل تكرار يصبح سطر الأعداد أقصر، وهكذا نحصل على شكل الهرم.

قد تصبح الحلقات المتداخلة مربكة سريعًا، لكن فهم طريقة عملها ضروري. ومن المرجّح أن تجد أداة التمثيل المرئي في موقع Python Tutor مفيدة في فهم كيفية عمل هذا المثال. انسخ الشيفرة أعلاه إلى نافذة الشيفرة في الأداة، وتابع تشكّل المخرجات وتغيّر قيم المتغيّرات المساعدة مع تقدّم التنفيذ.

تمرين تفاعلي: الضرب

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

Please type in a number: 2
1 x 1 = 1
1 x 2 = 2
2 x 1 = 2
2 x 2 = 4
Please type in a number: 3
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: الأحرف الأولى للكلمات

يُرجى كتابة برنامج يطلب من المستخدم كتابة جملة. ثم يطبع البرنامج الحرف الأول من كل كلمة في الجملة، كل حرف في سطر منفصل.

مثال على السلوك المتوقع:

Please type in a sentence: **Humpty Dumpty sat on a wall**
H
D
s
o
a
w

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: المضروب

يُرجى كتابة برنامج يطلب من المستخدم كتابة عدد صحيح. فإذا كتب المستخدم عددًا يساوي 0 أو أصغر منه، ينتهي التنفيذ. وإلا ف البرنامج يطبع مضروب العدد.

ينطوي مضروب العدد على ضرب العدد في جميع الأعداد الصحيحة الموجبة الأصغر منه. وبعبارة أخرى، هو حاصل ضرب جميع الأعداد الصحيحة الموجبة التي تقل عن العدد أو تساويه. فمثلًا، مضروب العدد 5 هو 1 * 2 * 3 * 4 * 5 = 120.

بعض أمثلة السلوك المتوقع:

Please type in a number: **3**
The factorial of the number 3 is 6
Please type in a number: **4**
The factorial of the number 4 is 24
Please type in a number: **-1**
Thanks and bye!
Please type in a number: **1**
The factorial of the number 1 is 1
Please type in a number: **0**
Thanks and bye!

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: اقلب الأزواج

يُرجى كتابة برنامج يطلب من المستخدم كتابة عدد. ثم يطبع البرنامج جميع القيم الصحيحة الموجبة من 1 حتى العدد. غير أن ترتيب الأعداد يتغيّر بحيث ينقلب كل زوج من الأعداد. أي أن 2 تسبق 1، و4 تسبق 3، وهكذا. راجع الأمثلة أدناه للتفاصيل.

Please type in a number: **5**
2
1
4
3
5
Please type in a number: **6**
2
1
4
3
6
5

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: بالتناوب

يُرجى كتابة برنامج يطلب من المستخدم كتابة عدد. ثم يطبع البرنامج الأعداد الصحيحة الموجبة بين 1 والعدد نفسه، بالتناوب بين طرفَي النطاق كما في الأمثلة أدناه.

Please type in a number: **5**
1
5
2
4
3
Please type in a number: **6**
1
6
2
5
3
4

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.