الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 2 من 46/36 في الدورة~8 min
دروس الوحدة (2/4)

بينما الحلقات

تكرر الحلقة while الكتلة طالما بقي الشرط صحيحًا. استخدم while عندما لا تعرف مقدمًا عدد التكرارات التي ستحتاج إليها: يعتمد عدد الجولات على الشيء الذي يتغير داخل الحلقة.

بناء الجملة

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

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

الأنماط الشائعة

العداد اليدوي — يعادل for الكلاسيكي في اللغات الأخرى:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

حلقة لا نهائية + شرط خروج داخلي — مفيد عندما يكون الشرط موجودًا يتم تقييمه بعد القيام بشيء ما:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break يخرج فورًا من الحلقة الأعمق (سنرى ذلك في الحلقة التالية الدرس).

الخطأ الكلاسيكي: الحلقة اللانهائية

إذا كان المتغير في الحالة لا يتغير داخل الحلقة، فإن لا ينتهي البرنامج أبدًا. إنه الخطأ رقم واحد في while:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

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

مخاطر الحلقات اللانهائية وشروط الإنهاء

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

جربه بنفسك

تمرين#python.m2.l2.e1
المحاولات: 0جارٍ التحميل…

أوجد أصغر عدد صحيح `n >= 1` بحيث يتجاوز 2**n المليون. قم بتعيينها إلى "النتيجة" وتقييمها (يجب أن تكون 20).

جارٍ تحميل المحرر…
إظهار التلميح

2**20 = 1,048,576 هو أول من يتجاوز 1,000,000.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m2.l2.e2
المحاولات: 0جارٍ التحميل…

بدءًا من `n = 1000`، قم بتقسيم n إلى النصف (n // 2) حتى يصبح 0. احسب عدد التكرارات التي تم إجراؤها في `الخطوات`. تقييم "الخطوات".

جارٍ تحميل المحرر…
إظهار التلميح

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: عشر خطوات.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m2.l2.e3
المحاولات: 0جارٍ التحميل…

Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.

جارٍ تحميل المحرر…
إظهار التلميح

The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.

الحل متاح بعد 3 من المحاولات