جاري تحميل المحتوى...
في الفصل السابق تعلّمت كيف تجعل البرنامج يختار بين مسارات مختلفة باستخدام الشروط. في هذا الفصل ستتعلم كيف تجعل البرنامج يكرر مجموعة من التعليمات بدل كتابتها مرة بعد مرة. تسمى هذه الفكرة بالحلقات أو Loops، وهي من الأدوات الأساسية في البرمجة.
تخيل أنك تريد طباعة الأعداد من 0 إلى 4. يمكنك كتابة خمس تعليمات منفصلة:
print(0)
print(1)
print(2)
print(3)
print(4)
هذا ممكن، لكنه يصبح غير عملي عندما يزيد عدد مرات التكرار. باستخدام الحلقة يمكن كتابة الفكرة نفسها بطريقة أقصر وأكثر تنظيمًا.
for number in range(5):
print(number)
تنفذ الحلقة التعليمة print(number) خمس مرات، بينما تتغير قيمة number في كل دورة.
forتستخدم حلقة for عندما تريد تكرار مجموعة من التعليمات على قيم محددة. سنستخدم في هذا الفصل range() بوصفها الطريقة الأساسية لتوليد القيم التي تحتاجها الحلقة.
for number in range(3):
print(number)
تعطي range(3) القيم 0 ثم 1 ثم 2. في كل دورة توضع القيمة الحالية في المتغير number، ثم تنفذ التعليمة داخل الحلقة.
الناتج:
0
1
2
range()تساعد range() على تحديد القيم التي ستمر بها حلقة for. لها عدة صور بسيطة سنستخدمها في هذا الفصل.
range(stop)عند كتابة قيمة واحدة، يبدأ العد من 0 ويتوقف قبل قيمة stop.
for number in range(4):
print(number)
القيم هي:
0
1
2
3
لاحظ أن العدد 4 غير مشمول. قيمة stop تحدد مكان التوقف، لكنها لا تدخل ضمن القيم الناتجة.
range(start, stop)يمكن تحديد قيمة البداية بالإضافة إلى التوقف.
for number in range(2, 5):
print(number)
تبدأ القيم من 2 وتتوقف قبل 5:
2
3
4
range(start, stop, step)القيمة الثالثة step تحدد مقدار الانتقال بين قيمة وأخرى.
for number in range(1, 8, 2):
print(number)
تبدأ الحلقة من 1 وتزيد بمقدار 2 في كل مرة، لذلك يكون الناتج:
1
3
5
7
ما زالت قيمة stop غير مشمولة؛ فالحلقة تتوقف قبل الوصول إلى 8.
في المثال التالي يسمى number متغير الحلقة:
for number in range(4):
print(number)
تتغير قيمته تلقائيًا بين دورات الحلقة: 0 ثم 1 ثم 2 ثم 3.
يمكن استخدام القيمة الحالية في عملية حسابية:
for number in range(1, 4):
print(number * 2)
الناتج:
2
4
6
يمكن أيضًا تخزين نتيجة تتغير مع كل دورة.
total = 0
for number in range(1, 4):
total = total + number
print(total)
تمر الحلقة بالقيم 1 و2 و3. تبدأ قيمة total من 0، ثم تضاف إليها كل قيمة، فتكون النتيجة النهائية 6.
forيمكن استخدام ما تعلمته عن if داخل الحلقة لاتخاذ قرار في كل دورة.
for number in range(1, 6):
if number > 3:
print(number)
تمر الحلقة بالأعداد من 1 إلى 5. لا تنفذ print() إلا عندما تكون المقارنة number > 3 صحيحة، لذلك يظهر:
4
5
يمكن أيضًا استخدام باقي القسمة مع شرط بسيط:
for number in range(1, 6):
if number % 2 == 0:
print(number)
تظهر القيم 2 و4 لأن باقي قسمتهما على 2 يساوي 0.
whileتستمر حلقة while في التنفيذ ما دام شرطها يساوي True.
count = 1
while count <= 3:
print(count)
count = count + 1
تبدأ قيمة count من 1. في كل دورة تتحقق Python من الشرط count <= 3. إذا كان صحيحًا تنفذ التعليمات داخل الحلقة، ثم تزيد قيمة count.
الناتج:
1
2
3
عندما تصبح قيمة count هي 4 يصبح الشرط False وتتوقف الحلقة.
whileمن المهم أن يتغير شيء يؤثر في شرط while عندما تريد أن تصل الحلقة إلى نقطة توقف.
count = 1
while count <= 5:
print(count)
count = count + 1
السطر count = count + 1 يضيف 1 إلى قيمة العداد في كل دورة.
+=يمكن كتابة عملية زيادة المتغير بطريقة أقصر باستخدام +=.
count = 1
while count <= 3:
print(count)
count += 1
التعليمة count += 1 تعني هنا الشيء نفسه تقريبًا مثل count = count + 1: أضف 1 إلى القيمة الحالية ثم خزّن النتيجة مرة أخرى في count.
while؟إذا بقي شرط while صحيحًا ولم تتغير القيم التي يعتمد عليها، فقد تستمر الحلقة دون الوصول إلى نقطة توقف طبيعية.
مثلًا، الكود التالي لا يغير قيمة count:
count = 1
while count <= 3:
print(count)
تبقى قيمة count مساوية لـ1، ولذلك يبقى الشرط صحيحًا. عند كتابة حلقة while تأكد من وجود تحديث مناسب عندما يكون ذلك ضروريًا للوصول إلى نهاية الحلقة.
for أم while؟كلتا الحلقتين تستخدمان للتكرار، لكن اختيار إحداهما يعتمد على طبيعة المسألة.
for غالبًا عندما تكون القيم أو عدد مرات التكرار واضحًا، مثل التكرار باستخدام range().while عندما تريد الاستمرار ما دام شرط معين صحيحًا.مثلًا، إذا أردت تنفيذ تعليمة خمس مرات، تكون for مع range(5) واضحة:
for number in range(5):
print(number)
أما إذا كان استمرار التكرار مرتبطًا بشرط يتغير أثناء التنفيذ، فقد تكون while أكثر وضوحًا:
count = 1
while count <= 3:
print(count)
count += 1
breakتستخدم break لإنهاء الحلقة الحالية فورًا.
for number in range(1, 6):
if number == 3:
break
print(number)
تمر الحلقة أولًا بالقيمة 1 ثم 2 وتطبعهما. عندما تصبح قيمة number هي 3 يتحقق الشرط وتنفذ break، فتنتهي الحلقة.
الناتج:
1
2
continueتستخدم continue لتجاوز بقية تعليمات الدورة الحالية والانتقال إلى الدورة التالية من الحلقة.
for number in range(5):
if number == 2:
continue
print(number)
عندما تكون قيمة number هي 2 تنفذ continue، ولذلك لا تنفذ print(number) في تلك الدورة.
الناتج:
0
1
3
4
لاحظ الفرق: break تنهي الحلقة، أما continue فتتجاوز الدورة الحالية فقط وتسمح للحلقة بالاستمرار.
يمكن وضع حلقة داخل حلقة أخرى. تسمى هذه الفكرة Nested Loops أو الحلقات المتداخلة.
for outer in range(2):
for inner in range(3):
print(outer, inner)
الحلقة الخارجية تنفذ مرتين. في كل دورة منها تنفذ الحلقة الداخلية ثلاث مرات، ولذلك تنفذ print() ست مرات إجمالًا.
الناتج:
0 0
0 1
0 2
1 0
1 1
1 2
في هذه المرحلة يكفي فهم أن كل دورة من الحلقة الخارجية تشغّل الحلقة الداخلية كاملة.
stop غير مشمول في range()for number in range(1, 5):
print(number)
الناتج ينتهي عند 4، وليس 5.
التعليمات التي يجب تكرارها تكون داخل الحلقة بمسافة بادئة صحيحة.
for number in range(3):
print(number)
print("انتهت الحلقة")
السطر الأول من print() يتكرر، أما السطر الأخير فهو خارج الحلقة وينفذ مرة واحدة بعد انتهائها.
whileإذا كان شرط الحلقة يعتمد على count فيجب عادةً تحديثه للوصول إلى حالة يصبح فيها الشرط False.
count = 1
while count <= 3:
print(count)
count += 1
break وcontinuebreak تنهي الحلقة الحالية.continue تتجاوز بقية الدورة الحالية فقط.for outer in range(2):
for inner in range(2):
print(outer, inner)
الحلقة الداخلية تنفذ مرتين لكل واحدة من دورتي الحلقة الخارجية، لذلك تنفذ print() أربع مرات.
استخدم for وrange() لطباعة الأعداد من 0 إلى 4.
استخدم range(start, stop) لطباعة الأعداد من 3 إلى 7.
استخدم range(start, stop, step) لطباعة 2 ثم 4 ثم 6 ثم 8.
اكتب حلقة while تبدأ بمتغير count = 1 وتطبع القيم حتى 5 مع تحديث العداد في كل دورة.
اكتب حلقة for تمر بالأعداد من 1 إلى 5، واستخدم شرطًا لطباعة الأعداد الزوجية فقط.
اكتب حلقة تستخدم break لتتوقف عندما تصل قيمة متغير الحلقة إلى 4.
اكتب حلقة تستخدم continue لتتجاوز طباعة العدد 3 مع استمرار بقية التكرارات.
أنشئ حلقتين متداخلتين، كل واحدة منهما تستخدم range(2)، ثم احسب عدد مرات تنفيذ التعليمة الموجودة داخل الحلقة الداخلية.
for غالبًا عندما يكون نطاق القيم أو عدد مرات التكرار واضحًا.range() على إنشاء القيم المستخدمة مع for.stop في range() غير مشمولة.range(start, stop, step) للتحكم في البداية والتوقف ومقدار الانتقال.while ما دام شرطها True.while عندما يكون ذلك ضروريًا لإنهاء الحلقة.count += 1 طريقة مختصرة لزيادة قيمة count بمقدار 1.break تنهي الحلقة الحالية.continue تتجاوز بقية الدورة الحالية وتنتقل إلى الدورة التالية.في الفصل التالي ستنتقل إلى النصوص في Python، وستتعلّم خصائص وعمليات جديدة خاصة بالقيم النصية. أما معالجة النصوص نفسها فلم نستخدمها هنا بوصفها جزءًا من شرح الحلقات.
نشر في ١١ أغسطس ٢٠٢٦