› كل الدروس
الدرس 5 من 12 30 دقيقة

Loops

خلّي الكمبيوتر يعيد الشغل بدالك

الفكرة باختصار

loop بتخلّي نفس code يتنفّذ أكتر من مرة — مرة لكل item، أو لحد ما condition يتحقق.

بعد الدرس ده هتعرف

  • تستخدم for للف على items معروفة
  • تستخدم while للتكرار لحد ما condition يتغيّر
  • تفهم range وتتجنّب أشهر غلطة فيها
  • تستخدم break و continue في مكانهم الصح
1

شوف الفكرة الأول

قبل أي code — افهم بيحصل إيه

2

الشرح

فكرة واحدة في كل خطوة

1

for — لف على كل item

لو عندك مجموعة حاجات وعايز تعمل حاجة لكل واحدة فيهم، استخدم for.

اقراها بالعربي كده: «لكل temp في temps، اعمل الآتي».

Python بتاخد أول item، تحطه في temp، تنفّذ الجسم. بعدين تاني item. وهكذا لحد ما تخلص.

Python
1temps = [36.5, 37.2, 38.1]
2for temp in temps:
3 print(f"Reading: {temp}")
الناتج
Reading: 36.5
Reading: 37.2
Reading: 38.1
2

range — لمّا تحتاج أرقام

range(5) بتدّيك الأرقام من 0 لـ 4 — خمس أرقام، بس من غير الـ5.

دي أشهر غلطة في Python كلها: الرقم الأخير مش داخل.

range(1, 6) → من 1 لـ 5
range(0, 10, 2) → 0، 2، 4، 6، 8

Python
1for i in range(5):
2 print(i)
3print("---")
4for i in range(1, 4):
5 print(i)
الناتج
0
1
2
3
4
---
1
2
3
3

جمّع نتيجة من loop

أكتر استخدام عملي لـ loop: تجميع. بتعمل variable فاضي قبل loop، وبتزوّد فيه جوّه loop.

لازم تعرّف variable قبل loop. لو عرّفته جوّه، هيتصفّر كل لفّة.

Python
1grades = [80, 95, 72, 88]
2total = 0
3for g in grades:
4 total = total + g
5print("Sum:", total)
6print("Average:", total / len(grades))
الناتج
Sum: 335
Average: 83.75
4

while — كرّر لحد ما

for بتستخدمها لما تعرف عدد اللفّات. while لما تعرف condition الوقوف بس.

خطر حقيقي: لازم يكون فيه حاجة جوّه loop بتغيّر condition. لو نسيت n = n - 1، program هيفضل يلف للأبد.

Python
1patients = 3
2while patients > 0:
3 print(f"{patients} patients left")
4 patients = patients - 1
5print("Clinic done")
الناتج
3 patients left
2 patients left
1 patients left
Clinic done
5

break — اخرج فورًا

break بتخرّجك من loop على طول، حتى لو لسه فيه items.

بتستخدمها لما تلاقي اللي بتدوّر عليه ومفيش داعي تكمّل.

Python
1numbers = [4, 9, 15, 22, 7]
2for n in numbers:
3 if n > 10:
4 print(f"found a big number: {n}")
5 break
6 print(f"checked {n}")
الناتج
checked 4
checked 9
found a big number: 15
6

continue — عدّي اللفّة دي بس

continue بتقول «سيب باقي code في اللفّة دي وروح لـ item اللي بعده».

الفرق عن break: break بتسيب loop خالص، continue بتكمّل عادي.

Python
1for n in range(1, 7):
2 if n % 2 == 0:
3 continue
4 print(n)
الناتج
1
3
5
7

loop جوّه loop

loop الجوّانية بتخلص كاملة كل لفّة من loop البرّانية.

يعني لو البرّانية 3 لفّات والجوّانية 4، code جوّه هيشتغل 12 مرة.

Python
1for i in range(1, 4):
2 for j in range(1, 4):
3 print(f"{i} × {j} = {i*j}")
الناتج
1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
8

enumerate — الرقم و item مع بعض

كتير هتحتاج ترقّم اللي بتلف عليه. الطريقة البدائية: variable عدّاد بتزوّده بإيدك.

Python عندها أحسن: enumerate بتدّيك الرقم و item في نفس اللفّة.

و indexing بيبدأ من صفر — ولو عايزه من 1 اكتب enumerate(xs, 1).

Python
1names = ["Mona", "Karim", "Sara"]
2for i, name in enumerate(names, 1):
3 print(f"{i}. {name}")
الناتج
1. Mona
2. Karim
3. Sara
9

بتلف على إيه؟ — أي حاجة فيها items

for مش للّيستات بس. بتلف على أي حاجة ليها items:

· string → حرف حرف
· list → item ورا item
· dictionary → key ورا key
· range → رقم رقم

نفس الشكل بالظبط في الأربع حالات — ده اللي بيخلّي Python سهلة.

Python
1for ch in "IT":
2 print(ch)
3for key in {"a": 1, "b": 2}:
4 print(key)
الناتج
I
T
a
b
10

while True + break — loop بتقف لما تلاقي

ساعات مش عارف عدد اللفّات ولا condition واضح في الأول — عايز تفضل تلف لحد ما حاجة تحصل.

الشكل: while True: (يعني لف للأبد) + break جوّه لما تلاقي اللي بتدوّر عليه.

خطر: لازم يكون فيه break فعلاً، وإلا program هيعلّق. ولو بتقرا من المستخدم، حُط حد أقصى للمحاولات.

Python
1n = 1
2while True:
3 n = n * 2
4 if n > 50:
5 break
6print("first power of two above 50:", n)
الناتج
first power of two above 50: 64
3

وده كمان شوفه متحرك

الفكرة دي أسهل ما تتشاف من ما تتقرا

4

أمثلة محلولة

شوف إزاي بنفكّر قبل ما نكتب

مثال 1

جدول الضرب

المطلوب: اطبع جدول ضرب رقم 7 من 1 لـ 10.

نفكّر إزاي؟

  1. 1عدد اللفّات معروف → for مع range
  2. 2عايز من 1 لـ 10 → range(1, 11) مش range(1, 10)
  3. 3كل لفّة: اطبع المسألة وناتجها
مثال 2

المجموع والمتوسط

المطلوب: عندك درجات. احسب مجموعهم ومتوسطهم بـ loop (من غير sum).

نفكّر إزاي؟

  1. 1محتاج variable يجمّع — أعرّفه قبل loop
  2. 2كل لفّة أزوّد عليه
  3. 3بعد ما loop تخلص، أقسم على العدد
مثال 3

العد التنازلي بـ while

المطلوب: عدّ من 5 لـ 1 وبعدين اطبع «انطلق».

نفكّر إزاي؟

  1. 1condition الوقوف معروف، مش عدد اللفّات → while
  2. 2لازم حاجة جوّه loop تقرّبني من الوقوف
  3. 3من غير n -= 1 loop هتفضل للأبد
مثال 4

دوّر على item واخرج

المطلوب: دوّر على أول طالب درجته أقل من 50، ولو ملقتش قول «الكل ناجح».

نفكّر إزاي؟

  1. 1أول ما ألاقيه مفيش داعي أكمّل → break
  2. 2محتاج أعرف إني لقيت ولا لأ → variable علامة
  3. 3العلامة بتتظبط جوّه loop وبتتفحص بعدها
مثال 5

فلترة بـ continue

المطلوب: اطبع الأرقام من 1 لـ 10 اللي بتقبل القسمة على 3 بس.

نفكّر إزاي؟

  1. 1عايز أعدّي اللي مش مطابق لـ condition
  2. 2continue بتقفز للفّة اللي بعدها على طول
  3. 3كده code المهم بيفضل في مستوى واحد
مثال 6

الهرم — loop جوّه loop

المطلوب: اطبع هرم من النجوم ارتفاعه 5.

نفكّر إزاي؟

  1. 1كل row فيه عدد نجوم مختلف
  2. 2loop البرّانية لـ rows، والرقم نفسه هو عدد النجوم
  3. 3مش محتاج loop جوّانية أصلاً — "*" * i بتكفي
5

ورقة مراجعة

ارجعلها وإنت بتحل — مش محتاج تحفظها

كل حاجة عن loops
الحاجةمعناهامثالالناتج
for x in xs:لف على كل itemfor c in "ab":c = a ثم b
range(n)من 0 لـ n-1range(3)0 1 2
range(a, b)من a لـ b-1range(1, 4)1 2 3
range(a, b, s)بخطوة srange(0, 7, 2)0 2 4 6
while condition:كرّر طول ما condition صحwhile n > 0:لحد ما يبطل
breakاخرج من loop خالصif x: breakloop وقفت
continueعدّي اللفّة دي بسif x: continueلـ item اللي بعده
x += 1زوّد على نفسهtotal += gtotal = total + g
enumerate(xs)الرقم و item مع بعضfor i, v in enumerate(xs)0 و أول item
len(xs)عدد itemslen([1,2,3])3
6

loop وهي بتلف — عدّاد حيّ

شوفه بيشتغل سطر سطر

شغّل code خطوة خطوة

شوف المؤشر بيرجع لفوق كل لفّة، و variables بتتغيّر. ده بالظبط إيه اللي بيحصل في الذاكرة.

1readings = [36.5, 38.2, 37.0, 39.1, 36.8]◂
2fever_count = 0
3highest = 0
4for t in readings:
5 if t > 37.5:
6 fever_count = fever_count + 1
7 if t > highest:
8 highest = t
9print(f"fever cases: {fever_count}")
10print(f"highest reading: {highest}")
الذاكرة
readings[36.5, 38.2, 37.0, 39.1, 36.8]
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا [36.5, 38.2, 37.0, 39.1, 36.8] جوّه readings

خطوة 128 خطوة
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

7

غلطات بتحصل كتير

شوفها هنا بدل ما تضيّع ساعة فيها

غلط
for i in range(1, 5):
    print(i)
# expected 1 2 3 4 5
صح
for i in range(1, 6):
    print(i)

range بتقف قبل الرقم التاني. عشان توصل لـ 5 لازم تكتب 6.

غلط
n = 5
while n > 0:
    print(n)
صح
n = 5
while n > 0:
    print(n)
    n = n - 1

loop لا نهائية — مفيش حاجة بتغيّر n فـ condition هيفضل صح للأبد.

غلط
for g in grades:
    total = 0
    total = total + g
صح
total = 0
for g in grades:
    total = total + g

تصفير المجموع جوّه loop بيلغي كل لفّة فاتت. عرّفه قبل loop.

8

مسائل سريعة

فكّر الأول — بعدين اكشف

1

كام مرة هتلف؟

1for i in range(2, 7):
2 print(i)
2

إيه الناتج؟

1for i in range(0, 10, 3):
2 print(i)
3

إيه آخر رقم هيتطبع؟

1for i in range(5):
2 print(i)
4

إيه value total؟

1total = 0
2for n in [1, 2, 3]:
3 total += n
4print(total)
5

إيه الغلط هنا؟

1for n in [1, 2, 3]:
2 total = 0
3 total += n
4print(total)
6

إيه اللي هيتطبع؟

1for i in range(1, 6):
2 if i == 3:
3 break
4 print(i)
7

وهنا؟

1for i in range(1, 6):
2 if i == 3:
3 continue
4 print(i)
8

code ده هيشتغل كام مرة؟

1for i in range(3):
2 for j in range(4):
3 print(i, j)
9

جرّب بنفسك

اكتب code — ده الجزء اللي بيعلّم فعلاً

جرّب بنفسك

عندك قايمة درجات. اطبع كل درجة ناجحة (60 فأكتر) بس، وفي الآخر اطبع عدد الناجحين.

شغّل code خطوة خطوة
1grades = [45, 78, 90, 55, 67]◂
2count = 0
3# write the loop here
4
الذاكرة
grades[45, 78, 90, 55, 67]
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا [45, 78, 90, 55, 67] جوّه grades

خطوة 13 خطوات
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 2
جرّب بنفسك

اطبع مجموع الأرقام الفردية من 1 لـ 20.

شغّل code خطوة خطوة
1total = 0◂
2# write the loop here
3
الذاكرة
total0
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا 0 جوّه total

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 3
جرّب بنفسك

عندك قايمة أسماء. اطبع كل اسم ورقمه بدايةً من 1 (استخدم enumerate).

شغّل code خطوة خطوة
1names = ["Mona", "Karim", "Sara"]◂
2# write here
3
الذاكرة
names['Mona', 'Karim', 'Sara']
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا ['Mona', 'Karim', 'Sara'] جوّه names

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 4
جرّب بنفسك

اكتب loop while بتقسم الرقم 1000 على 2 كل مرة وتطبع الناتج، وتقف لما يبقى أقل من 10.

شغّل code خطوة خطوة
1n = 1000◂
2# write the loop here
3
الذاكرة
n1000
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا 1000 جوّه n

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

10

اختبر نفسك

كل إجابة معاها السبب

1

إيه الناتج؟

1for i in range(0, 10, 3):
2 print(i)
2

إيه الغلط في code ده؟

1for n in [1, 2, 3]:
2 total = 0
3 total += n
4print(total)
3

code ده هيطبع كام سطر؟

1for i in range(3):
2 for j in range(4):
3 print(i, j)
4

كام مرة هتلف loop دي؟

1for i in range(3):
2 print(i)
5

إيه اللي هيتطبع؟

1for i in range(1, 4):
2 if i == 2:
3 continue
4 print(i)
6

إيه الفرق بين break و continue؟

7

code ده فيه مشكلة. إيه هي؟

1n = 5
2while n > 0:
3 print(n)

خلصت الدرس؟

علّم عليه عشان تعرف إنت وصلت لفين لما ترجع تاني.

الدرس اللي بعده: Strings ←