مرحبًا بك في الدرس الثاني عشر من سلسلة أساسيات بايثون على موقع بايثون العرب. في هذا الدرس سنشرح مفهومًا مهمًا جدًا في البرمجة، وهو Loops أو الحلقات في Python.
الحلقات تساعدك على تكرار تنفيذ نفس الكود أكثر من مرة بدون أن تكتبه يدويًا في كل مرة. بدل أن تكتب أمر الطباعة عشر مرات، يمكنك كتابة حلقة واحدة تجعل بايثون تكرر الأمر نيابة عنك.
سنتعلم في هذا الدرس شرح for loop و while loop، واستخدام range()، والفرق بين break و continue، وكيف تتجنب الحلقة اللانهائية، مع أمثلة عملية مناسبة للمبتدئين.
{getToc} $title={محتوى المقال}
{alertInfo} إذا وجدت نفسك تكتب نفس السطر أكثر من مرة، فغالبًا أنت تحتاج إلى Loop بدل تكرار الكود يدويًا.
قبل هذا الدرس، من الأفضل أن تكون لديك فكرة عن الشروط في بايثون، لأننا سنستخدم if داخل الحلقات في أكثر من مثال. يمكنك مراجعة درس:
أساسيات بايثون 11: شرح if و else في Python للمبتدئين.
ما معنى Loop في البرمجة؟
كلمة Loop تعني حلقة أو تكرار. في البرمجة نستخدم الحلقات عندما نريد تنفيذ نفس الكود عدة مرات بطريقة منظمة.
مثلاً بدل أن تكتب:
print("مرحبا")
print("مرحبا")
print("مرحبا")
يمكنك استخدام حلقة واحدة:
for i in range(3):
print("مرحبا")
الناتج في الحالتين هو نفسه، لكن الكود الثاني أفضل لأنه أقصر وأسهل في التعديل. لو أردت طباعة الكلمة 100 مرة، ستغير الرقم فقط بدل كتابة 100 سطر.
لماذا نحتاج إلى Loops في Python؟
نحتاج إلى الحلقات لأن كثيرًا من البرامج تعتمد على التكرار. مثلًا قد تحتاج إلى:
- طباعة الأرقام من 1 إلى 100.
- المرور على أسماء الطلاب داخل قائمة.
- جمع أرقام موجودة داخل List.
- البحث عن عنصر معين داخل قائمة.
- تكرار سؤال المستخدم حتى يكتب إجابة صحيحة.
- قراءة عناصر ملف أو بيانات واحدة تلو الأخرى.
بدون الحلقات ستضطر إلى تكرار الكود يدويًا، وهذا يجعل البرنامج طويلًا وصعب الصيانة.
أنواع الحلقات في Python
في بايثون يوجد نوعان أساسيان من الحلقات:
for loop: تستخدم غالبًا عندما تريد المرور على عناصر موجودة، مثل قائمة أو نص أو أرقام منrange().while loop: تستخدم عندما تريد تكرار الكود طالما أن شرطًا معينًا ما زال صحيحًا.
| نوع الحلقة | متى تستخدمها؟ | مثال مناسب |
|---|---|---|
for |
عندما تعرف العناصر التي تريد المرور عليها | المرور على قائمة أسماء |
while |
عندما تريد التكرار طالما أن شرطًا صحيح | تكرار السؤال حتى يدخل المستخدم قيمة صحيحة |
شرح for loop في Python
نستخدم for عندما نريد المرور على مجموعة عناصر وتنفيذ كود معين على كل عنصر.
الشكل العام:
for item in collection:
# code to repeat
مثال على المرور على قائمة:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
الناتج:
apple
banana
cherry
هنا أخذت الحلقة كل عنصر من قائمة fruits ووضعته مؤقتًا داخل المتغير fruit، ثم نفذت أمر الطباعة عليه.
{alertSuccess} اسم المتغير داخل for يمكن أن يكون أي اسم، لكن الأفضل اختيار اسم واضح مثلfruitعند المرور على قائمة اسمهاfruits.
شرح for loop خطوة بخطوة
في المثال السابق لدينا قائمة:
fruits = ["apple", "banana", "cherry"]
ثم كتبنا:
for fruit in fruits:
معنى هذا السطر: خذ كل عنصر من القائمة fruits وضعه مؤقتًا في المتغير fruit، ثم نفذ الكود الموجود داخل الحلقة.
وفي كل دورة تعمل:
print(fruit)
لذلك يتم طباعة كل عنصر في القائمة.
استخدام for مع النصوص
يمكنك استخدام for مع النصوص أيضًا، لأن النص في بايثون يتكون من أحرف.
for letter in "Python":
print(letter)
الناتج:
P
y
t
h
o
n
الحلقة هنا مرت على كل حرف داخل كلمة Python وطبعت الحروف واحدًا بعد الآخر.
استخدام range في Python
الدالة range() تستخدم لإنشاء تسلسل من الأرقام. وهي مفيدة جدًا مع for loop عندما تريد تكرار الكود عددًا معينًا من المرات.
for i in range(5):
print(i)
الناتج:
0
1
2
3
4
لاحظ أن range(5) تبدأ من 0 وتنتهي قبل 5، لذلك آخر رقم مطبوع هو 4.
{alertWarning}
انتبه: range(5) لا تطبع الرقم 5، بل تتوقف عند 4 لأن النهاية غير داخلة في النطاق.
تحديد البداية والنهاية في range
يمكنك تحديد رقم البداية ورقم النهاية داخل range().
for i in range(1, 6):
print(i)
الناتج:
1
2
3
4
5
هنا بدأت الأرقام من 1، وانتهت قبل 6، لذلك تمت طباعة الأرقام من 1 إلى 5.
تحديد مقدار الزيادة في range
يمكنك أيضًا تحديد مقدار الزيادة. مثلًا لو أردت طباعة الأرقام الزوجية فقط:
for i in range(2, 11, 2):
print(i)
الناتج:
2
4
6
8
10
معنى range(2, 11, 2): ابدأ من 2، توقف قبل 11، وزد الرقم بمقدار 2 في كل مرة.
مثال عملي: طباعة جدول الضرب
لنستخدم for مع range() لطباعة جدول ضرب رقم معين.
number = 5
for i in range(1, 11):
print(number, "x", i, "=", number * i)
جزء من الناتج:
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
هذا المثال يوضح فائدة الحلقات: بدل أن نكتب عمليات الضرب يدويًا، جعلنا الحلقة تكرر العملية من 1 إلى 10.
شرح while loop في Python
نستخدم while عندما نريد تكرار الكود طالما أن شرطًا معينًا صحيح.
الشكل العام:
while condition:
# code runs while condition is True
مثال:
count = 1
while count <= 5:
print(count)
count = count + 1
الناتج:
1
2
3
4
5
الحلقة استمرت طالما أن قيمة count أقل من أو تساوي 5. وبعد كل دورة قمنا بزيادة count حتى يتوقف الشرط في النهاية.
شرح while خطوة بخطوة
بدأنا بقيمة أولية:
count = 1
ثم وضعنا شرط الحلقة:
while count <= 5:
داخل الحلقة نطبع الرقم:
print(count)
ثم نزيده بواحد:
count = count + 1
ويمكن اختصارها هكذا:
count += 1
{alertWarning} عند استخدام while يجب أن تتأكد أن الشرط سيتغير في مرحلة ما، وإلا قد تحصل على حلقة لا نهائية.
ما هي الحلقة اللانهائية Infinite Loop؟
الحلقة اللانهائية تحدث عندما يبقى شرط while صحيحًا دائمًا، فلا تتوقف الحلقة.
مثال خطأ:
count = 1
while count <= 5:
print(count)
المشكلة هنا أننا لم نغير قيمة count داخل الحلقة، لذلك ستبقى قيمته 1 دائمًا، وسيبقى الشرط صحيحًا.
الصحيح:
count = 1
while count <= 5:
print(count)
count += 1
{alertError} الحلقة اللانهائية قد تجعل البرنامج لا يتوقف، لذلك تأكد دائمًا أن شرط while سيتغير داخل الحلقة.
استخدام break لإيقاف الحلقة
الكلمة break تستخدم لإيقاف الحلقة بالكامل فورًا، حتى لو لم تنتهِ كل الدورات.
for i in range(1, 10):
if i == 5:
break
print(i)
الناتج:
1
2
3
4
عندما وصلت قيمة i إلى 5، نفذت بايثون break وأوقفت الحلقة بالكامل.
استخدام continue لتخطي دورة واحدة
الكلمة continue لا توقف الحلقة بالكامل، لكنها تتخطى الدورة الحالية فقط وتنتقل إلى الدورة التالية.
for i in range(1, 6):
if i == 3:
continue
print(i)
الناتج:
1
2
4
5
لاحظ أن الرقم 3 لم يتم طباعته، لأن continue جعلت الحلقة تتخطى هذه الدورة فقط.
الفرق بين break و continue
| الأداة | ماذا تفعل؟ | متى تستخدمها؟ |
|---|---|---|
break |
توقف الحلقة بالكامل | عندما تصل إلى النتيجة المطلوبة ولا تحتاج لإكمال التكرار |
continue |
تتخطى الدورة الحالية فقط | عندما تريد تجاهل حالة معينة ومتابعة باقي التكرار |
Nested Loops في Python
يمكنك وضع حلقة داخل حلقة أخرى، وهذا يسمى Nested Loop أو الحلقة المتداخلة.
for i in range(1, 4):
for j in range(1, 4):
print(i, j)
هذا النوع يستخدم في الجداول، المصفوفات، الشبكات، وبعض أنماط الطباعة. لكنه قد يصبح صعبًا على المبتدئ إذا زادت مستويات التداخل، لذلك استخدمه عند الحاجة فقط.
مثال عملي: جمع أرقام قائمة باستخدام for
لنستخدم حلقة لجمع أرقام داخل قائمة:
numbers = [10, 20, 30]
total = 0
for number in numbers:
total += number
print(total)
الناتج:
60
الحلقة مرت على كل رقم داخل القائمة وأضافته إلى المتغير total.
هذا المثال مرتبط بدرس: بايثون بالمثال: جمع عناصر قائمة في Python.
مثال عملي: البحث عن اسم داخل قائمة
يمكن استخدام الحلقة للبحث عن عنصر داخل قائمة.
names = ["Ahmed", "Sara", "Omar"]
for name in names:
if name == "Sara":
print("تم العثور على الاسم")
هذا المثال يجمع بين for و if. نمر على الأسماء واحدًا واحدًا، وإذا كان الاسم يساوي "Sara" نطبع رسالة.
مثال عملي: تكرار السؤال حتى يدخل المستخدم كلمة صحيحة
هذا مثال مناسب لاستخدام while. نريد أن يستمر البرنامج في سؤال المستخدم حتى يكتب كلمة المرور الصحيحة.
password = ""
while password != "python123":
password = input("أدخل كلمة المرور: ")
print("تم تسجيل الدخول بنجاح")
هنا ستستمر الحلقة طالما أن كلمة المرور غير صحيحة. وعندما يكتب المستخدم python123 يتوقف الشرط وتخرج بايثون من الحلقة.
أخطاء شائعة عند استخدام Loops
الخطأ الأول: نسيان النقطتين
هذا كود خاطئ:
for i in range(5)
print(i)
الصحيح:
for i in range(5):
print(i)
الخطأ الثاني: نسيان المسافة البادئة
هذا كود خاطئ:
for i in range(5):
print(i)
الصحيح:
for i in range(5):
print(i)
الخطأ الثالث: حلقة while لا تتوقف
عند استخدام while تأكد أن الشرط سيتغير داخل الحلقة.
مثال صحيح:
count = 1
while count <= 5:
print(count)
count += 1
الخطأ الرابع: استخدام while بدل for بدون حاجة
إذا كنت تعرف عدد مرات التكرار أو تريد المرور على قائمة، فغالبًا for أوضح وأسهل. أما while فهي مناسبة عندما يعتمد التكرار على شرط قد يتغير أثناء تشغيل البرنامج.
{alertSuccess} أفضل طريقة لتعلم Loops هي كتابة أمثلة صغيرة: طباعة أرقام، المرور على قائمة، جمع عناصر، والبحث عن قيمة.
متى أستخدم for ومتى أستخدم while؟
| الحالة | الأفضل | السبب |
|---|---|---|
| المرور على قائمة أسماء | for |
لأن العناصر موجودة مسبقًا |
| طباعة الأرقام من 1 إلى 10 | for مع range() |
لأن عدد التكرارات معروف |
| تكرار السؤال حتى يكتب المستخدم كلمة خروج | while |
لأن التوقف يعتمد على إدخال المستخدم |
| تنفيذ كود طالما الشرط صحيح | while |
لأن التكرار يعتمد على شرط |
أسئلة شائعة عن Loops في Python
هل يمكن استخدام for بدون range؟
نعم، يمكنك استخدام for مع القوائم والنصوص والقواميس والكثير من الكائنات القابلة للتكرار في Python.
هل range تبدأ دائمًا من صفر؟
إذا كتبت range(5) فستبدأ من صفر. أما إذا كتبت range(1, 6) فستبدأ من 1 وتنتهي قبل 6.
ما الفرق بين for و while؟
استخدم for عندما تعرف ما الذي تريد المرور عليه أو تعرف عدد مرات التكرار. واستخدم while عندما تريد استمرار التكرار طالما شرط معين صحيح.
لماذا تحدث الحلقة اللانهائية؟
تحدث غالبًا عندما تستخدم while وتنسى تغيير المتغير الذي يعتمد عليه الشرط، فيبقى الشرط صحيحًا دائمًا.
هل break و continue تعملان مع for و while؟
نعم، يمكن استخدام break و continue مع حلقات for وحلقات while.
روابط مفيدة
- أساسيات بايثون 11: شرح if و else في Python
- أساسيات بايثون 16: شرح Lists في Python للمبتدئين
- بايثون بالمثال 2: معرفة هل الرقم زوجي أم فردي في Python
- جمع عناصر قائمة في Python
- محرر بايثون العرب لتجربة الأكواد أونلاين
- توثيق Python الرسمي حول التحكم في تدفق البرنامج
خلاصة الدرس
في هذا الدرس تعلمنا شرح Loops في Python، وفهمنا كيف تساعدنا الحلقات على تكرار الكود بطريقة منظمة بدل كتابته أكثر من مرة.
تعلمنا استخدام for loop للمرور على القوائم والنصوص والأرقام، وتعلمنا استخدام range() لتوليد أرقام، وتعلمنا استخدام while loop للتكرار حسب شرط معين.
كما فهمنا معنى الحلقة اللانهائية، والفرق بين break و continue، ومتى نستخدم for ومتى نستخدم while.
{alertSuccess} الخلاصة السريعة: استخدم for عندما تعرف العناصر أو عدد التكرارات، واستخدم while عندما تريد التكرار طالما أن شرطًا معينًا صحيح.
تمرين بسيط لك
اكتب برنامجًا يطبع الأرقام من 1 إلى 10 باستخدام for.
for i in range(1, 11):
print(i)
ثم حاول كتابة نفس البرنامج باستخدام while. بعد ذلك جرّب تعديل البرنامج ليطبع الأرقام الزوجية فقط من 2 إلى 20.