دروس الوحدة (2/4)
بينما الحلقات
تكرر الحلقة while الكتلة طالما بقي الشرط صحيحًا. استخدم
while عندما لا تعرف مقدمًا عدد التكرارات التي ستحتاج إليها:
يعتمد عدد الجولات على الشيء الذي يتغير داخل الحلقة.
بناء الجملة
n = 1
while n < 1000:
n = n * 2
n # 1024يتم تنفيذ الكتلة ذات المسافة البادئة بشكل متكرر. قبل كل تكرار بيثون يقيم الشرط: بمجرد أن يصبح خطأ، تنتهي الحلقة و يستمر التنفيذ بعد الحظر.
الأنماط الشائعة
العداد اليدوي — يعادل for الكلاسيكي في اللغات الأخرى:
i = 0
while i < 5:
print(i)
i = i + 1حلقة لا نهائية + شرط خروج داخلي — مفيد عندما يكون الشرط موجودًا يتم تقييمه بعد القيام بشيء ما:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break يخرج فورًا من الحلقة الأعمق (سنرى ذلك في الحلقة التالية
الدرس).
الخطأ الكلاسيكي: الحلقة اللانهائية
إذا كان المتغير في الحالة لا يتغير داخل الحلقة، فإن
لا ينتهي البرنامج أبدًا. إنه الخطأ رقم واحد في while:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!في تماريننا هناك مهلة للتنفيذ، لذا ستفشل الحلقة اللانهائية برسالة واضحة بدلاً من تجميد المتصفح. ولكن في الإنتاج تعد الحلقة اللانهائية خطأً خطيرًا.
مخاطر الحلقات اللانهائية وشروط الإنهاء
يتم تنفيذ حلقة while طالما تم تقييم حالتها على أنها True. إذا نسيت تحديث المتغيرات التي تؤثر على الحالة، فسيتم تشغيل حلقتك إلى ما لا نهاية، مما يؤدي إلى تجميد وقت التشغيل. تأكد دائمًا من أن جسم الحلقة يحرز تقدمًا نحو حالة الخروج.
جربه بنفسك
أوجد أصغر عدد صحيح `n >= 1` بحيث يتجاوز 2**n المليون. قم بتعيينها إلى "النتيجة" وتقييمها (يجب أن تكون 20).
إظهار التلميح
2**20 = 1,048,576 هو أول من يتجاوز 1,000,000.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
بدءًا من `n = 1000`، قم بتقسيم n إلى النصف (n // 2) حتى يصبح 0. احسب عدد التكرارات التي تم إجراؤها في `الخطوات`. تقييم "الخطوات".
إظهار التلميح
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: عشر خطوات.
الحل متاح بعد 3 من المحاولات
التحدي الإضافي
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 من المحاولات