البرمجة
الحلقات في 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)** — كيف تنظم كودك وتعيد استخدامه!
**جرب التمارين الخمسة قبل الانتقال للمقال التالي. الممارسة هي المفتاح!**
**ما نوع الحلقة التي وجدتها الأسهل؟ شاركنا في التعليقات!**