تخطَّ إلى المحتوى

حلقة while و break و continue في Python

الدرس 11 من 25 · Python

في الدرس السابق استخدمنا for عندما نعرف ما سنمر عليه. لكن أحياناً لا تعرف متى ستتوقف: متى سيكتب المستخدم كلمة المرور الصحيحة؟ متى سينفد الرصيد؟ في هذا الدرس ستتعلم حلقة while، وكيف تتحكم في أي حلقة بـ break و continue.

الكلمة while تعني «طالما». الحلقة تكرر الكود طالما الشرط صحيح:

count = 3
while count > 0:
print(count)
count -= 1
print("انطلق!")
الناتج
3
2
1
انطلق!

خطوات التنفيذ:

  1. هل count > 0؟ نعم (3)، فاطبع 3 وأنقص واحداً.
  2. هل count > 0؟ نعم (2)، فاطبع 2 وأنقص واحداً.
  3. وهكذا… حتى يصبح count صفراً، فيصبح الشرط False وتتوقف الحلقة.

تخيّل while مثل ملء كوب ماء من الصنبور: تستمر في الملء طالما الكوب لم يمتلئ، ولا تعرف مسبقاً كم ثانية ستحتاج.

balance = 100
days = 0
while balance > 0:
balance -= 30
days += 1
print(f"نفدت النقود بعد {days} أيام")
الناتج
نفدت النقود بعد 4 أيام

معك 100 جنيه وتصرف 30 كل يوم. الحلقة تستمر طالما معك نقود، وتعدّ الأيام.

إذا لم يصبح الشرط خاطئاً أبداً، تستمر الحلقة إلى الأبد:

count = 3
while count > 0:
print(count)
# نسينا أن ننقص count!

هذا البرنامج سيطبع 3 بلا توقف. إذا حدث معك هذا، اضغط Ctrl + C في الطرفية لإيقاف البرنامج.

break: اخرج من الحلقة فوراً

Section titled “break: اخرج من الحلقة فوراً”

break توقف الحلقة كلها في الحال، حتى لو كان الشرط ما زال صحيحاً:

password_attempts = ["123", "abc", "secret"]
for attempt in password_attempts:
if attempt == "secret":
print("تم تسجيل الدخول")
break
print("كلمة مرور خاطئة:", attempt)
الناتج
كلمة مرور خاطئة: 123
كلمة مرور خاطئة: abc
تم تسجيل الدخول

النمط الشائع: while True مع break

Section titled “النمط الشائع: while True مع break”

كثيراً ما يكتب المبرمجون حلقة «لا نهائية» عن قصد، ثم يخرجون منها بـ break عندما يتحقق شيء ما:

while True:
answer = input("اكتب 'خروج' للإنهاء: ")
if answer == "خروج":
break
print("كتبت:", answer)
print("إلى اللقاء!")
الناتج
اكتب 'خروج' للإنهاء: أهلاً
كتبت: أهلاً
اكتب 'خروج' للإنهاء: خروج
إلى اللقاء!

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

continue تتخطى باقي الدورة الحالية فقط، وتنتقل مباشرة للدورة التالية:

for i in range(1, 11):
if i % 2 == 0:
continue # تخطَّ الأرقام الزوجية
if i > 7:
break # توقف بعد 7
print(i)
الناتج
1
3
5
7

الفرق بينهما مثل قائمة تشغيل الأغاني: continue تتخطى الأغنية الحالية وتكمل القائمة، و break تطفئ المشغّل تماماً.

ميزة خاصة في Python: يمكنك وضع else بعد الحلقة، وتُنفّذ فقط إذا انتهت الحلقة بشكل طبيعي دون break:

for n in [3, 5, 7]:
if n % 2 == 0:
print("وجدنا رقماً زوجياً")
break
else:
print("لا توجد أرقام زوجية")
الناتج
لا توجد أرقام زوجية

الحلقة مرت على كل الأرقام ولم تجد رقماً زوجياً، فلم تُنفّذ break، فنُفّذ ما في else.

اكتب برنامج «آلة حاسبة للتوفير»: اسأل المستخدم عن المبلغ الذي يريد توفيره، وعن المبلغ الذي يوفّره كل أسبوع، ثم احسب بحلقة while عدد الأسابيع اللازمة. مثال:

الناتج
ما المبلغ المطلوب؟ 500
كم توفّر كل أسبوع؟ 120
ستحتاج 5 أسابيع
  • الحلقة اللانهائية: نسيان تعديل متغير الشرط داخل الحلقة. أوقفها بـ Ctrl + C.
  • وضع break خارج حلقة: break و continue تعملان داخل الحلقات فقط، وإلا يظهر SyntaxError.
  • الخلط بين break و continue: break تُنهي الحلقة، و continue تتخطى دورة واحدة فقط.

سؤال

متى تتوقف حلقة while؟

سؤال

ماذا تفعل continue داخل الحلقة؟

  • while شرط: تكرر الكود طالما الشرط صحيح.
  • غيّر متغير الشرط داخل الحلقة لتتجنب الحلقة اللانهائية، وأوقفها بـ Ctrl + C عند الحاجة.
  • break تُنهي الحلقة فوراً، و continue تتخطى الدورة الحالية.
  • النمط while True مع break شائع لتكرار سؤال المستخدم.
  • else بعد الحلقة تُنفّذ فقط إذا لم تُنفّذ break.