تعريف الحلقة while
نستخدم الحلقة while
إذا كنا نريد تنفيذ الكود عدة مرات, ولكننا لا نعرف كم مرة بالتحديد لأننا نريد إيقاف التنفيذ إذا تحقق شرط معين.
هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها.
هنا كأننا نقول: "طالما أن الشرط لم يتحقق إستمر في تكرار الكود".
طريقة إستخدامها
initialisation;
while condition:
    statements
    increment أو decrement;
- initialisation:   هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة.
في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ).
- condition:   هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة.
في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة, في كل دورة يتم التأكد أولاً إذا تحقق هذا الشرط أم لا.
هنا طالما أن نتيجة الشرط تساوي true
سيعيد تكرار الكود.
- statements:   هي الخطوة الثالثة, و تعني تنفيذ جميع الأوامر الموجودة في الحلقة و هي تتنفذ في كل دورة.
- (decrement أو increment):   هي الخطوة الرابعة و الأخيرة, و هي تتنفذ في كل دورة.
هنا نحدد كيف تزداد أو تنقص قيمة العداد.
تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة, و السبب أننا لا نحتاج إلى تعريف عداد جديد في كل دورة, بل نستعمل العداد القديم و الذي من خلاله نعرف في أي دورة أصبحنا.
مثال حول الحلقة while
في المثال التالي قمنا بتعريف حلقة تطبع جميع الأرقام من 1 إلى 10.
في البداية قمنا بتعريف متغير إسمه i
و أعطينها القيمة 1 لأننا سنستخدمه كعداد في الحلقة.
بعدها قمنا بإنشاء حلقة while
تظل تنفذ الأوامر الموضوعة فيها طالما أن قيمة العداد i
لا تزال أصغر أو تساوي 10.
في كل دورة في هذه الحلقة سيتم طباعة قيمة العداد i
ثم إضافة 1 على قيمته.
مثال
Test.py
i = 1
while i <= 10:
print(i)
i += 1
سنحصل على النتيجة التالية عند التشغيل.
1
2
3
4
5
6
7
8
9
10
مثال حول إستخدام الجملة الشرطية else
مع الحلقة while
في بايثون
يمكنك وضع الجملة الشرطية else
مباشرةً بعد الحلقة while
لتنفيذ بلوك من الكود ( مجموعة أوامر ) مباشرةً عندما تتوقف الحلقة عن إعادة تنفيذ الكود الموضوع فيها, أي عندما يصبح جواب الشرط الذي يجعلها تستمر في إعادتها نفسها طالما هو True
يساوي False
.
مثال
Test.py
i = 1
while i <= 10:
print(i)
i += 1
else:
print('This block is executed when the condition return False!')
سنحصل على النتيجة التالية عند التشغيل.
1
2
3
4
5
6
7
8
9
10
This block is executed when the condition return False!
تذكر: الكود الموضوع في بلوك الجملة else
سيتنفذ دائماً بعد أن تتوقف الحلقة عن العمل, و سيتنفذ أيضاً حتى لو تتنفذ الحلقة من الأساس.
لتتأكد من هذا الأمر, قم بإعطاء المتغير i
القيمة 100
بدل القيمة 1 و لاحظ أيضاً أنه سينفذ أمر الطباعة الموضوع في البلوك else
.
طريقة إنشاء حلقة لا تتوقف (Infinite Loop)
تحذير
قبل تجربة الأمثلة التالية على الحاسوب عليك معرفة أن الـ Infinite Loop قد تجعله يعلّق أو قد تسبب في حرق المعالج إذا لم يتم إيقاف الكود يدوياً خلال وقت قصير.
الصورة التالية توضح طريقة إيقاف أي برنامج يدوياً بعد أن يتم تشغيله.

طريقة إنشاء حلقة لا تتوقف عن استداعاء نفسها.
المثال الأول
Test.py
while 1 == 1:
print('I am stuck!')
سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
طريقة إنشاء حلقة لا تتوقف عن استداعاء نفسها.
المثال الثاني
Test.py
while True:
print('I am stuck!')
سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
طريقة إنشاء حلقة لا تتوقف عن استداعاء نفسها.
المثال الثالث
Test.py
flag = True
while flag == True:
print('I am stuck!')
سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!