التكرار ما دام الشرط متحققًا
حلقة while تفحص شرطًا قبل كل دورة وتنفّذ كتلتها ما دام الشرط True. استخدمها عندما لا تعرف مسبقًا عدد الدورات اللازمة: تنصيف أمر حتى يصبح صغيرًا بما يكفي، أو الانتظار حتى يتجاوز سعر مستوى ما، أو تنمية رصيد حتى يبلغ هدفًا. يجب أن يغيّر شيء داخل الكتلة الشرط، وإلا لن تنتهي الحلقة أبدًا.
# Halve an order until it is small enough to trade at once
quantity, limit = 1000, 100
steps = 0
while quantity > limit:
quantity = quantity / 2
steps += 1
print(steps, quantity) # 4 62.5for أم while؟
استخدم for عندما تكون لديك العناصر أو تعرف عددها: فهي لا تستطيع العمل إلى الأبد. واستخدم while عندما تتوقف نقطة الانتهاء على ما يحدث أثناء الحلقة. اختبار جيد: إن استطعت قول «لكل واحد من هؤلاء» فاكتب for، وإن قلت «حتى يصبح هذا صحيحًا» فاكتب while.
while تحقق من ثلاثة أشياء: الشرط يستخدم متغيرًا تغيّره الحلقة، والتغيير يحدث في كل دورة، ويقرّب الشرط من أن يصبح False. وإذا طالت حلقة أكثر من اللازم هنا فإنها تتوقف بعد 10 ثوانٍ.break: اترك الحلقة فورًا
ينهي break الحلقة فورًا ويكمل بالسطر الذي يليها. إنه الطريقة للتوقف بمجرد حصولك على الجواب، مثل أول سعر يتجاوز حدًا. هنا تمرّ الحلقة على المواضع بمؤشر ترفعه بنفسها.
# break leaves the loop at once
prices = [184.25, 184.5, 186.0, 185.0]
limit = 185.5
index = 0
while index < len(prices):
if prices[index] > limit:
print("breach at", index) # breach at 2
break
index += 1continue: انتقل إلى الدورة التالية
يتخطى continue بقية الدورة الحالية ويعود إلى الشرط. وهو مفيد لتجاهل البيانات السيئة دون وضع العمل الحقيقي داخل if متداخلة. في حلقة while غيّر متغير الحلقة قبل continue، وإلا ظلت الحلقة تصادف العنصر نفسه إلى الأبد.
# continue skips the rest of the pass; step first, or it never moves on
fills = [100, -5, 250, 0, 75]
total = 0
index = 0
while index < len(fills):
value = fills[index]
index += 1
if value <= 0:
continue
total += value
print(total) # 425حلقات تبحث أو تتقارب
كثير من مهام التحليل الكمّي من نوع «واصل حتى»: رسملة حتى بلوغ هدف، أو تحسين تقدير حتى يتوقف عن التغير، أو إعادة المحاولة حتى ينجح طلب. والشكل while True: مع break في المنتصف شائع عندما يكون اختبار الخروج في وسط العمل.
# How many years until 10,000 grows to 15,000 at 7% a year?
balance, target, rate = 10_000, 15_000, 0.07
years = 0
while balance < target:
balance = balance * (1 + rate)
years += 1
print(years) # 6
# while True + break: the exit test sits in the middle
attempt = 0
while True:
attempt += 1
if attempt * 25 >= 100:
break
print(attempt) # 4- يستخدم الشرط متغيرًا تغيّره الحلقة.
- يحدث التغيير في كل دورة حتى قبل
continue. - استخدم
breakفور معرفة الجواب.
التالي: تعريف الدوال واستدعاؤها، لإعطاء كتلة شيفرة اسمًا وإعادة استخدامها.
المختبر: ما الذي يُقيَّم
- احسب عدد تنصيفات الأمر باستخدام
halving_steps25 نقطة - أوجد أول سعر يتجاوز حدًّا باستخدام
first_breach25 نقطة - اجمع التنفيذات الصالحة حتى علامة النهاية باستخدام
sum_until_zero25 نقطة - نمِّ رصيدًا حتى بلوغ هدف باستخدام
years_to_target25 نقطة