البرمجة

الحلقات في Python — كرر المهام بذكاء

📅 2026-09-22⏱ 10 دقائق قراءة
تخيل أنك تريد طباعة الأرقام من 1 إلى 100. هل ستكتب 100 سطر `print`؟ بالطبع لا! هنا يأتي دور **الحلقات (Loops)** — التي تكرر الأوامر تلقائياً. الحلقات هي ما يجعل البرمجة قوية حقاً. بدلاً من كتابة كود متكرر مئات المرات، تكتبه مرة واحدة وتترك Python تكرره. بنهاية هذا المقال، ستكون قادراً على: - استخدام حلقة `for` للتكرار على المجموعات - استخدام حلقة `while` للتكرار حسب شرط - استخدام `range()` لتوليد تسلسل من الأرقام - التحكم في الحلقات بـ `break` و `continue` - بناء مشاريع تطبيقية باستخدام الحلقات ## 1. لماذا نحتاج الحلقات؟ ### المشكلة: التكرار الممل تخيل أنك تريد طباعة "مرحباً" 5 مرات: ```python # بدون حلقات — كود مكرر print("مرحباً") print("مرحباً") print("مرحباً") print("مرحباً") print("مرحباً") ``` هذا يعمل، لكنه غير عملي. ماذا لو أردت 1000 مرة؟ ### الحل: استخدام الحلقات ```python # مع حلقات — كود أنيق for i in range(5): print("مرحباً") ``` **النتيجة:** نفس النتيجة بسطرين بدلاً من 5! ## 2. حلقة for — التكرار على المجموعات ### ما هي حلقة for؟ حلقة `for` تُستخدم للتكرار على **مجموعة من العناصر** (نص، قائمة، نطاق أرقام...). ### الصيغة الأساسية ```python for variable in sequence: # الكود الذي يتكرر ``` **⚠️ ملاحظات:** - تنتهي بنقطتين `:` - الكود بعدها يكون مُزاحاً (Indented) - المتغير يتغير تلقائياً في كل تكرار ### مثال 1: التكرار على نص ```python for letter in "Python": print(letter) ``` **النتيجة:** ``` P y t h o n ``` **شرح:** - الحلقة تمر على كل حرف في "Python" - في كل مرة، `letter` يأخذ قيمة الحرف الحالي ### مثال 2: التكرار على قائمة ```python fruits = ["تفاح", "موز", "برتقال", "عنب"] for fruit in fruits: print(f"أحب {fruit}") ``` **النتيجة:** ``` أحب تفاح أحب موز أحب برتقال أحب عنب ``` ### مثال 3: طباعة الأرقام من 1 إلى 10 ```python for i in range(1, 11): print(i) ``` **النتيجة:** ``` 1 2 3 4 5 6 7 8 9 10 ``` ## 3. دالة range() — مولّد الأرقام ### ما هي range()؟ `range()` هي دالة تولّد تسلسلاً من الأرقام. هي الأكثر استخداماً مع `for`. ### الصيغ الثلاث <table> <thead> <tr> <th>الصيغة</th> <th>المعنى</th> <th>مثال</th> <th>النتيجة</th> </tr> </thead> <tbody> <tr> <td><code>range(n)</code></td> <td>من 0 إلى n-1</td> <td><code>range(5)</code></td> <td>0, 1, 2, 3, 4</td> </tr> <tr> <td><code>range(start, stop)</code></td> <td>من start إلى stop-1</td> <td><code>range(2, 7)</code></td> <td>2, 3, 4, 5, 6</td> </tr> <tr> <td><code>range(start, stop, step)</code></td> <td>مع خطوة</td> <td><code>range(0, 10, 2)</code></td> <td>0, 2, 4, 6, 8</td> </tr> </tbody> </table> ### مثال 1: range(n) ```python for i in range(5): print(i) ``` **النتيجة:** ``` 0 1 2 3 4 ``` **⚠️ مهم:** `range(5)` يبدأ من 0 وينتهي عند 4 (وليس 5). ### مثال 2: range(start, stop) ```python for i in range(3, 8): print(i) ``` **النتيجة:** ``` 3 4 5 6 7 ``` ### مثال 3: range مع خطوة ```python # الأرقام الزوجية من 0 إلى 10 for i in range(0, 11, 2): print(i) ``` **النتيجة:** ``` 0 2 4 6 8 10 ``` ### مثال 4: العد التنازلي ```python for i in range(10, 0, -1): print(i) print("انطلق! 🚀") ``` **النتيجة:** ``` 10 9 8 7 6 5 4 3 2 1 انطلق! 🚀 ``` ## 4. حلقة while — التكرار حسب شرط ### ما هي حلقة while؟ حلقة `while` تكرر الكود **طالما الشرط متحقق**. ### الصيغة الأساسية ```python while condition: # الكود الذي يتكرر ``` ### مثال 1: العد من 1 إلى 5 ```python counter = 1 while counter <= 5: print(counter) counter += 1 ``` **النتيجة:** ``` 1 2 3 4 5 ``` **شرح:** 1. `counter = 1` 2. هل `1 <= 5`؟ نعم → اطبع 1، ثم `counter = 2` 3. هل `2 <= 5`؟ نعم → اطبع 2، ثم `counter = 3` 4. ... وهكذا حتى `counter = 6` 5. هل `6 <= 5`؟ لا → توقف ### ⚠️ تحذير: الحلقة اللانهائية **خطأ شائع:** ```python # خطأ — حلقة لا نهائية! counter = 1 while counter <= 5: print(counter) # نسيت counter += 1 ``` **النتيجة:** البرنامج يطبع "1" للأبد! لإيقافه، اضغط `Ctrl + C`. **القاعدة الذهبية:** تأكد دائماً أن هناك شيء يتغير داخل `while` ليوقف الحلقة. ### مثال 2: التحقق من كلمة المرور ```python password = "" while password != "python2026": password = input("أدخل كلمة المرور: ") if password != "python2026": print("❌ خاطئة، حاول مرة أخرى") print("✅ تم تسجيل الدخول!") ``` ### مثال 3: لعبة تخمين الرقم (نسخة كاملة) ```python import random secret = random.randint(1, 20) guess = 0 attempts = 0 print("🎮 خمن الرقم بين 1 و 20!") while guess != secret: guess = int(input("تخمينك: ")) attempts += 1 if guess < secret: print("⬆️ أكبر") elif guess > secret: print("⬇️ أصغر") else: print(f"🎉 مبروك! خمنت الرقم في {attempts} محاولات") ``` ## 5. مقارنة بين for و while <table> <thead> <tr> <th>المعيار</th> <th>for</th> <th>while</th> </tr> </thead> <tbody> <tr> <td><strong>الاستخدام</strong></td> <td>عندما تعرف عدد التكرارات</td> <td>عندما لا تعرف (حسب شرط)</td> </tr> <tr> <td><strong>مثال</strong></td> <td>طباعة 10 أرقام</td> <td>انتظار إدخال صحيح</td> </tr> <tr> <td><strong>الخطر</strong></td> <td>لا يوجد</td> <td>حلقة لا نهائية</td> </tr> <tr> <td><strong>الاستخدام الشائع</strong></td> <td>القوائم، النصوص، range</td> <td>التفاعل مع المستخدم</td> </tr> </tbody> </table> ## 6. جملة break — إيقاف الحلقة ### ما هي break؟ `break` تُوقف الحلقة **فوراً** وتخرج منها، حتى لو لم ينتهِ الشرط. ### مثال 1: إيقاف عند رقم معين ```python for i in range(1, 11): if i == 5: print("وصلنا إلى 5! توقف") break print(i) ``` **النتيجة:** ``` 1 2 3 4 وصلنا إلى 5! توقف ``` ### مثال 2: البحث عن عنصر ```python numbers = [3, 7, 12, 5, 18, 2, 9] target = 18 for num in numbers: if num == target: print(f"وجدنا {target}!") break else: print(f"{target} غير موجود") ``` **النتيجة:** ``` وجدنا 18! ``` ## 7. جملة continue — تخطي التكرار ### ما هي continue؟ `continue` تتخطى بقية الكود في التكرار الحالي وتنتقل للتكرار التالي. ### مثال 1: تخطي الأرقام الزوجية ```python for i in range(1, 11): if i % 2 == 0: continue print(i) ``` **النتيجة:** ``` 1 3 5 7 9 ``` **شرح:** عندما `i` يكون زوجياً (`i % 2 == 0`)، يتم تخطي `print` والانتقال للتكرار التالي. ### مثال 2: تجاوز القيم السالبة ```python numbers = [5, -3, 8, -1, 10, -7, 4] total = 0 for num in numbers: if num < 0: continue total += num print(f"مجموع الأرقام الموجبة: {total}") ``` **النتيجة:** ``` مجموع الأرقام الموجبة: 27 ``` ## 8. مقارنة: break مقابل continue <table> <thead> <tr> <th>الجملة</th> <th>الوظيفة</th> <th>التأثير</th> </tr> </thead> <tbody> <tr> <td><code>break</code></td> <td>إيقاف الحلقة كاملة</td> <td>يخرج من الحلقة</td> </tr> <tr> <td><code>continue</code></td> <td>تخطي التكرار الحالي</td> <td>ينتقل للتكرار التالي</td> </tr> <tr> <td><code>pass</code></td> <td>لا يفعل شيئاً</td> <td>للتخطيط المستقبلي</td> </tr> </tbody> </table> ## 9. جملة else مع الحلقات ### ميزة فريدة في Python في Python، يمكنك إضافة `else` بعد الحلقة. ينفذ الكود في `else` **إذا انتهت الحلقة بشكل طبيعي** (بدون `break`). ### مثال ```python numbers = [3, 7, 12, 5, 18, 2, 9] target = 100 for num in numbers: if num == target: print(f"وجدنا {target}!") break else: print(f"{target} غير موجود في القائمة") ``` **النتيجة:** ``` 100 غير موجود في القائمة ``` **لماذا؟** لأن الحلقة انتهت بدون تنفيذ `break`. ## 10. الحلقات المتداخلة ### ما هي الحلقات المتداخلة؟ حلقة داخل حلقة أخرى. نستخدمها للمصفوفات ثنائية الأبعاد، أو الجداول. ### مثال: جدول الضرب ```python # جدول ضرب من 1 إلى 5 for i in range(1, 6): for j in range(1, 6): print(f"{i} × {j} = {i * j}") print("-" * 20) ``` **النتيجة:** ``` 1 × 1 = 1 1 × 2 = 2 1 × 3 = 3 1 × 4 = 4 1 × 5 = 5 -------------------- 2 × 1 = 2 2 × 2 = 4 ... ``` ### مثال: طباعة نجمة ```python # مثلث من النجوم for i in range(1, 6): print("⭐" * i) ``` **النتيجة:** ``` ⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ``` ## 11. مشاريع عملية ### المشروع 1: جدول الضرب التفاعلي ```python # جدول ضرب تفاعلي num = int(input("أدخل رقماً لعرض جدول ضربه: ")) print(f"\n📊 جدول ضرب {num}:") print("=" * 20) for i in range(1, 11): print(f"{num} × {i} = {num * i}") print("=" * 20) ``` ### المشروع 2: جمع الأرقام حتى الصفر ```python # يجمع الأرقام حتى يدخل المستخدم 0 total = 0 count = 0 print("أدخل أرقاماً (اكتب 0 للتوقف):") while True: num = float(input("الرقم: ")) if num == 0: break total += num count += 1 print(f"المجموع الحالي: {total}") if count > 0: print(f"\n📊 ملخص:") print(f"عدد الأرقام: {count}") print(f"المجموع: {total}") print(f"المتوسط: {total / count:.2f}") else: print("لم تدخل أي رقم") ``` ### المشروع 3: طباعة الأعداد الأولية ```python # طباعة الأعداد الأولية من 2 إلى 50 print("الأعداد الأولية من 2 إلى 50:") for num in range(2, 51): is_prime = True for i in range(2, int(num ** 0.5) + 1): if num % i == 0: is_prime = False break if is_prime: print(num, end=" ") print() ``` **النتيجة:** ``` 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 ``` ### المشروع 4: عداد تنازلي مع رسم ```python import time print("🚀 استعد للإطلاق...") print() for i in range(5, 0, -1): print(f"⏱ {i}...") time.sleep(1) print("🚀 انطلق!") ``` ## 12. أخطاء شائعة ### الخطأ 1: نسيان الزيادة في while ```python # خطأ — حلقة لا نهائية i = 0 while i < 5: print(i) # نسيت i += 1 ``` **الحل:** ```python i = 0 while i < 5: print(i) i += 1 ``` ### الخطأ 2: تعديل القائمة أثناء التكرار ```python # خطأ numbers = [1, 2, 3, 4, 5] for num in numbers: if num % 2 == 0: numbers.remove(num) # خطر! ``` **الحل:** ```python # صحيح numbers = [1, 2, 3, 4, 5] numbers = [num for num in numbers if num % 2 != 0] ``` ### الخطأ 3: استخدام break خارج الحلقة ```python # خطأ if x == 5: break # SyntaxError ``` ### الخطأ 4: نسيان النقطتين ```python # خطأ for i in range(5) print(i) # صحيح for i in range(5): print(i) ``` ### الخطأ 5: إزاحة غير صحيحة ```python # خطأ for i in range(5): print(i) # صحيح for i in range(5): print(i) ``` ## 13. تمارين عملية ### التمرين 1: مجموع الأرقام اكتب برنامجاً يحسب مجموع الأرقام من 1 إلى 100. **النتيجة المتوقعة:** 5050 ### التمرين 2: طباعة الأرقام الزوجية اكتب برنامجاً يطبع الأرقام الزوجية من 1 إلى 20. **النتيجة المتوقعة:** 2 4 6 8 10 12 14 16 18 20 ### التمرين 3: عدّ حروف الكلمة اكتب برنامجاً يطلب كلمة ويطبع عدد حروفها. ```python # مثال word = input("أدخل كلمة: ") # اطبع عدد الحروف ``` ### التمرين 4: جدول ضرب اكتب برنامجاً يطبع جدول ضرب كامل من 1 إلى 10. ### التمرين 5: حساب المضروب اكتب برنامجاً يحسب مضروب رقم (Factorial). **مثال:** مضروب 5 = 5×4×3×2×1 = 120 ## قائمة تحقق — هل تعلمت؟ <table> <thead> <tr> <th>المهارة</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>استخدام حلقة <code>for</code></td> <td>⬜</td> </tr> <tr> <td>استخدام حلقة <code>while</code></td> <td>⬜</td> </tr> <tr> <td>استخدام <code>range()</code> بجميع صيغها</td> <td>⬜</td> </tr> <tr> <td>استخدام <code>break</code> لإيقاف الحلقة</td> <td>⬜</td> </tr> <tr> <td>استخدام <code>continue</code> لتخطي تكرار</td> <td>⬜</td> </tr> <tr> <td>الحلقات المتداخلة</td> <td>⬜</td> </tr> <tr> <td>بناء مشاريع باستخدام الحلقات</td> <td>⬜</td> </tr> </tbody> </table> ## الخلاصة في هذا المقال، تعلمت: 1. **حلقة `for`** — التكرار على المجموعات 2. **حلقة `while`** — التكرار حسب شرط 3. **دالة `range()`** — لتوليد تسلسل الأرقام 4. **`break`** — إيقاف الحلقة 5. **`continue`** — تخطي تكرار 6. **`else` مع الحلقات** — ميزة Python الفريدة 7. **الحلقات المتداخلة** — حلقة داخل حلقة **الحلقات هي ما يجعل البرمجة قوية** — بدونها، ستكتب نفس الكود مئات المرات. **في المقال القادم:** سنتعلم **الدوال (Functions)** — كيف تنظم كودك وتعيد استخدامه! **جرب التمارين الخمسة قبل الانتقال للمقال التالي. الممارسة هي المفتاح!** **ما نوع الحلقة التي وجدتها الأسهل؟ شاركنا في التعليقات!**