تخطَّ إلى المحتوى

حلقة for والدالة range في Python

الدرس 10 من 25 · Python

تخيّل أنك تريد أن تطبع رسالة ترحيب لكل طالب في فصل من 30 طالباً. هل ستكتب print ثلاثين مرة؟ بالطبع لا! في هذا الدرس ستتعلم حلقة for التي تكرر الكود تلقائياً، وستتعرف على الدالة range لتوليد الأرقام، وعلى طرق ذكية تجعل الحلقات أقصر وأوضح.

حلقة for تمر على عناصر مجموعة واحداً تلو الآخر:

for fruit in ["تفاح", "موز", "عنب"]:
print(fruit)
الناتج
تفاح
موز
عنب

اقرأها كجملة: «لكل فاكهة في القائمة، اطبع الفاكهة». في كل دورة يأخذ المتغير fruit قيمة العنصر التالي، ثم يُنفّذ الكود المُزاح.

تخيّلها مثل ساعي البريد الذي يمر على بيوت الشارع بيتاً بيتاً، ويسلّم كل بيت رسالته.

النص مجموعة من الحروف، فيمكنك المرور عليه بنفس الطريقة:

for letter in "كود":
print(letter)
الناتج
ك
و
د

الدالة range: توليد الأرقام

Section titled “الدالة range: توليد الأرقام”

عندما تريد أن تكرر شيئاً عدداً معيناً من المرات، استخدم range:

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

range(5) تولّد الأرقام من 0 حتى 4، أي خمسة أرقام، والرقم 5 نفسه لا يدخل.

for i in range(1, 6): # من 1 حتى 5
print(i, end=" ")
print()
for i in range(0, 11, 2): # من 0 حتى 10 بخطوة 2
print(i, end=" ")
print()
الناتج
1 2 3 4 5
0 2 4 6 8 10
  • range(نهاية): من 0 حتى قبل النهاية.
  • range(بداية, نهاية): من البداية حتى قبل النهاية.
  • range(بداية, نهاية, خطوة): مع تحديد مقدار القفز.

ويمكنك العد للخلف بخطوة سالبة:

for i in range(3, 0, -1):
print(i)
print("انطلق!")
الناتج
3
2
1
انطلق!

مجموع الأرقام من 1 إلى 100

Section titled “مجموع الأرقام من 1 إلى 100”
total = 0
for i in range(1, 101):
total += i
print(total)
الناتج
5050
for i in range(1, 6):
print(f"7 × {i} = {7 * i}")
الناتج
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35

enumerate: العنصر ورقمه معاً

Section titled “enumerate: العنصر ورقمه معاً”

أحياناً تحتاج أن تعرف رقم العنصر بجانب قيمته. الدالة enumerate تعطيك الاثنين:

names = ["أحمد", "سارة"]
for index, name in enumerate(names):
print(index, name)
for index, name in enumerate(names, start=1):
print(f"{index}. {name}")
الناتج
0 أحمد
1 سارة
1. أحمد
2. سارة

الخيار start=1 يجعل العدّ يبدأ من 1 بدلاً من 0، وهذا مناسب لعرض قائمة مرقّمة للمستخدم.

القوائم المختصرة (List Comprehension)

Section titled “القوائم المختصرة (List Comprehension)”

Python تسمح لك ببناء قائمة جديدة من حلقة في سطر واحد:

squares = [n ** 2 for n in range(1, 6)]
print(squares)
الناتج
[1, 4, 9, 16, 25]

اقرأها: «أعطني n تربيع، لكل n في الأرقام من 1 إلى 5». هذه الكتابة من أشهر ميزات Python، وستراها كثيراً في كود الآخرين.

اكتب برنامجاً يطلب من المستخدم رقماً، ثم يطبع جدول ضربه من 1 إلى 10، ثم يطبع مجموع نتائج الجدول. مثال:

الناتج
اكتب رقماً: 3
3 × 1 = 3
3 × 2 = 6
...
3 × 10 = 30
المجموع: 165

تحدٍّ إضافي: اطبع نتائج الجدول الزوجية فقط.

  • توقع أن range تشمل النهاية: range(1, 10) تتوقف عند 9. لتصل إلى 10 اكتب range(1, 11).
  • نسيان النقطتين أو الإزاحة: تسبب SyntaxError أو IndentationError.
  • تعديل القائمة أثناء المرور عليها: حذف عناصر من قائمة داخل حلقة for تمر عليها يسبب نتائج غريبة. أنشئ قائمة جديدة بدلاً من ذلك.

سؤال

ما الأرقام التي تولّدها range(2, 6)؟

سؤال

كم مرة تُنفّذ الحلقة for i in range(4):؟

  • for عنصر in مجموعة: تمر على العناصر واحداً تلو الآخر.
  • تعمل مع القوائم والنصوص وأي مجموعة.
  • range(بداية, نهاية, خطوة) تولّد أرقاماً، والنهاية لا تدخل.
  • enumerate تعطيك رقم العنصر وقيمته معاً.
  • القائمة المختصرة [تعبير for x in مجموعة] تبني قائمة في سطر واحد.