تعلم البرمجة بلغة بايثون #19"

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

هناك نوعان من الحلقات التكرارية في بايثون: حلقات while وحلقات for. سنبدأ بالحديث عن حلقات while.

تكلمنا بشكل مبسط عن الحلقات عندما شرحنا النمط التكراري لسير البرامج في درس سابق. لنعد الآن إلى المثال الذي رأيناه في ذلك الدرس:

n = 5
while n > 0:
  print(n)
  n = n - 1
print('Finished')

في السطر الأول ننشئ متغيراً اسمه n ونضع فيه الرقم 5. ثم نأتي لنجد كلمة while والتي تعني أننا سندخل حلقة تكرارية. دائماً مع كل while ومع كل حلقة تكرارية هناك شرط، مثل شرط if. إذا تحقق الشرط ندخل الحلقة وننفذ التعليمات التي بداخلها وإن لم يتحقق نتجاوز الحلقة ونتجاهل التعليمات التي بداخلها.

فوصلنا إلى while. الشرط هنا هو: n > 0 يعني هنا نطرح سؤالاً: هل n أكبر من 0؟ إذا كان الجواب True ندخل الحلقة وإن كان False نتجاوز الحلقة. بما أن قيمة n هي 5، و 5 أكبر من 0، إذن تحقق الشرط وسندخل الحلقة.

دخلنا الحلقة. أول تعليمة تصادفنا داخل الحلقة هي:

print(n)

والتي ستطبع قيمة n على الشاشة. بعدها نأتي للتعليمة الثانية داخل الحلقة:

n = n - 1

هذه التعليمة ستطرح 1 من قيمة n. فـ n كانت 5، ستصبح الآن 4. الآن أين سنذهب؟ سنعود إلى بداية الحلقة، وبالتحديد إلى شرط الحلقة، وسنسأل مرة أخرى: هل n أكبر من 0؟ الآن n تساوي 4، و 4 أكبر من 0، إذن جواب الشرط True وسيتم تنفيذ تعليمات الحلقة مرة أخرى. سيتم طباعة قيمة n ثم طرح 1 من قيمة n. ستصبح قيمة n عندها تساوي 3.

نعود بعدها إلى شرط الحلقة. نسأل: هل n أكبر من 0؟ وبما أن n تساوي الآن 3 فسيكون جواب الشرط True وسيتم تنفيذ تعليمات الحلقة مرة أخرى. سيتم طباعة قيمة n ثم طرح 1 من قيمة n. ستصبح قيمة n عندها تساوي 2.

نعود بعدها مرة أخرى إلى شرط الحلقة. نسأل: هل n أكبر من 0؟ وبما أن n تساوي الآن 2 فسيكون جواب الشرط True وسيتم تنفيذ تعليمات الحلقة مرة أخرى. سيتم طباعة قيمة n ثم طرح 1 من قيمة n. ستصبح قيمة n عندها تساوي 1.

نعود بعدها مرة أخرى إلى شرط الحلقة. نسأل: هل n أكبر من 0؟ وبما أن n تساوي الآن 1 فسيكون جواب الشرط True وسيتم تنفيذ تعليمات الحلقة مرة أخرى. سيتم طباعة قيمة n ثم طرح 1 من قيمة n. ستصبح قيمة n عندها تساوي 0.

الآن نعود مرة أخرى إلى شرط الحلقة ونسأل: هل n أكبر من 0؟ الآن n تساوي 0، و 0 يساوي 0، لكن 0 ليس أكبر من 0. إذن هذه المرة سيكون جواب الشرط False وهذا يعني أننا انتهينا من أمر حلقة while هذه وسننتقل إلى ما بعدها. ماذا يأتي بعدها؟ تأتي تعليمة الطباعة والتي ستطبع “Finished” على الشاشة.

المخطط التالي يوضح كيفية سير البرنامج:

المتغير n في هذا المثال يمكن أن نسميه متغير الحلقة، يعني هو المتغير الذي يعتمد شرط الحلقة عليه. ماذا لو كان البرنامج بهذا الشكل؟

n = 5
while n > 0:
  print(n)
print('Finished')

ما الذي سيحدث عند تنفيذ هذا البرنامج؟

في هذا البرنامج: الحلقة لا تحتوي على تعليمة إنقاص قيمة n. هذا سيؤدي إلى أن نكرر الحلقة لعدد لا نهائي من المرات، يعني أنه سيتم تكرار تنفيذ تعليمات الحلقة بلا نهاية، وذلك بسبب أن شرط الحلقة سيتحقق دائماً: قيمة n ستبقى 5، و 5 أكبر من 0، لا يوجد تعليمة لإنقاص قيمة n. إذن ستستمر بايثون بطباعة قيمة n وهي 5 بلا نهاية. هذا النوع من الحلقات يسمى الحلقات اللانهائية.

المثال التالي يعرض حلقة لانهائية من نوع آخر:

while True:
  print('مرحباً')

هذه البرنامج سيقوم بتكرار طباعة كلمة “مرحباً” بلا نهاية. لاحظ هنا أن شرط الحلقة هو True، لا يوجد سؤال هنا. يعني هنا اختصرنا قصة السؤال ووضعنا الجواب مباشرة وهو True وهذه ال True لا تتغير لأنها قيمة ثابتة وليست متغيراً. فهذه الحلقة ستستمر بالتكرار إلى ما لا نهاية.

فيديو الدرس