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

 


 

الحلقة تعيد تنفيذ كتلة من الكود

إذا احتاج البرنامج إلى عرض رسالة مئة مرة، فلا معنى لكتابة print() مئة مرة. الحلقة تضع التعليمات المتكررة في كتلة واحدة وتحدد كيف يستمر التكرار ومتى ينتهي.

for i in range(3):
    print("مرحبًا")

ينفذ المثال أمر الطباعة ثلاث مرات. وإذا تغير العدد في range() تغير عدد الدورات من دون تكرار الكود يدويًا.

if ليست حلقة
  • تختبر if الشرط مرة واحدة، وقد تنفذ كتلتها مرة واحدة.
  • تعيد while فحص الشرط قبل كل دورة، وتكرر كتلتها ما دام الشرط صحيحًا.

التكرار ليس الهدف وحده؛ يجب أن تكون له قاعدة توقف واضحة حتى ينتقل البرنامج إلى ما بعد الحلقة.


while: ابدأ واختبر ونفّذ وحدّث

تصلح while عندما يرتبط استمرار العمل بشرط، وقد لا يكون عدد الدورات معروفًا مسبقًا.

counter = 1

while counter <= 5:
    print(counter)
    counter += 1

print("انتهت الحلقة")

تمر الحلقة بأربع أفكار مترابطة:

  1. البدء: يأخذ العداد قيمة أولية هي 1.
  2. الاختبار: يُفحص الشرط counter <= 5 قبل كل دورة.
  3. التنفيذ: تُطبع القيمة عندما يكون الشرط صحيحًا.
  4. التحديث: تزيد القيمة بواحد حتى يصبح الشرط خطأ.

تكون المخرجات 1, 2, 3, 4, 5، ثم تصبح قيمة العداد 6 فيفشل الشرط وتنتهي الحلقة.

قد لا تعمل while أي مرة إذا كان شرطها خطأ منذ البداية؛ فهي تختبر قبل الدخول إلى الكتلة.


الحلقة اللانهائية: شرط لا يصل إلى False

تظهر الحلقة اللانهائية عندما يبقى شرط while صحيحًا ولا يحدث داخل الحلقة ما يقوده إلى الخطأ.

counter = 1

while counter <= 5:
    print(counter)

تظل قيمة counter مساوية لـ1 لأن الكود لا يحدثها، ولذلك يبقى الشرط صحيحًا وتستمر الطباعة.

  • يجب وضع التحديث داخل الحلقة حتى يُنفذ في كل دورة مطلوبة.
  • وضع counter += 1 بعد الحلقة لا يفيد؛ فلن يصل التنفيذ إليه ما دامت الحلقة لم تنتهِ.
  • قبل تشغيل while، يجب تحديد القيمة التي ستتغير واللحظة التي تجعل الشرط خطأ.

ليست كل حلقة مستمرة خطأ؛ فقد تُستخدم عمدًا في برامج تنتظر الأحداث، لكن يجب أن تحتوي عندئذ على طريقة منظمة للخروج أو الإيقاف.


for وrange(): تكرار بحدود معروفة

تكون for مناسبة عندما نعرف القيم التي سنمر عليها أو عدد مرات التكرار. وتوفر range() قيمًا عددية متتابعة تستخدمها الحلقة واحدةً بعد أخرى.

for i in range(1, 4):
    print(i)

تأخذ i القيم 1 ثم 2 ثم 3، وبعد نفاد القيم تنتهي الحلقة تلقائيًا. لا يلزم إنشاء العداد أو تحديثه يدويًا.

  • range(stop): تبدأ من الصفر وتتوقف قبل stop.
  • range(start, stop): تبدأ من start وتتوقف قبل stop.
  • range(start, stop, step): تضيف مقدار حركة بين كل قيمة والتي تليها.

نقطة البداية مشمولة، أما نقطة التوقف فغير مشمولة. لذلك تنتج range(4) القيم 0, 1, 2, 3، وتنتج range(1, 4) القيم 1, 2, 3.


الخطوة تحدد المسافة والاتجاه

لا تقتصر range() على الزيادة بواحد. تحدد الخطوة مقدار التغير واتجاهه.

النطاق القيم الناتجة
range(2, 11, 3) 2, 5, 8
range(0, 10, 2) 0, 2, 4, 6, 8
range(5, 0, -1) 5, 4, 3, 2, 1

يجب أن تقود الخطوة من البداية نحو نقطة التوقف. إذا كانت البداية أكبر من التوقف فتلزم خطوة سالبة للعد التنازلي؛ أما range(5, 0, 1) فلا تنتج قيمًا لأن الخطوة الموجبة تتحرك في الاتجاه الخطأ.

وقيمة الخطوة لا يمكن أن تكون صفرًا، لأن النطاق لن يستطيع الانتقال من قيمة إلى أخرى.


متى نستخدم for ومتى نستخدم while؟

  • تُستخدم for عند المرور على قيم معروفة أو عندما يكون عدد الدورات محددًا، مثل طباعة الأعداد من واحد إلى عشرة.
  • تُستخدم while عندما يستمر التكرار حتى تتغير حالة، مثل طلب كلمة المرور حتى تصبح صحيحة.

يمكن أحيانًا تنفيذ المهمة بالطريقتين. المثال التالي عد تنازلي باستخدام for:

for i in range(5, 0, -1):
    print(i)

print("انطلاق!")

ولتحليل أي حلقة، تُكتب القيم بالترتيب قبل توقع المخرجات. في range(2, 11, 3) نبدأ من 2، ونضيف 3 في كل مرة، ونتوقف قبل 11؛ فتكون القيم 2, 5, 8.

الاختيار الجيد هو الحلقة التي تعبّر عن سبب التكرار بأوضح صورة، لا الحلقة الأقصر دائمًا.


التمارين المرتبطة بهذا الدرس

  • التمرين الأول: فهم الحلقات وتتبع تنفيذها
  • التمرين الثاني: قواعد التكرار وحدود النطاق
  • التمرين الثالث: بناء النطاقات والحلقات
المزيد من المحتوى؟

سجل للوصول إلى المزيد