الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 1 من 45/36 في الدورة~10 min
دروس الوحدة (1/4)

للحلقات والمدى

يتم استخدام حلقة for في لغة Python للتكرار عبر تسلسل من العناصر: قائمة، سلسلة، نطاق، إملاء... أي شيء "قابل للتكرار".

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

النمط هو نفسه دائمًا: for <variable> in <iterable>: متبوعًا بـ الكتلة ذات المسافة البادئة التي سيتم تنفيذها مرة واحدة لكل عنصر.

range(...): إنشاء فواصل زمنية صحيحة

range يُنتج تسلسلًا بطيئًا من الأعداد الصحيحة. ثلاثة أشكال:

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range حصريًا على الطرف الأيمن، مثل slice. إنه كائن كسول: فهو لا يخصص ذاكرة لجميع الأرقام، بل ينتجها واحدًا تلو الآخر.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

التكرار باستخدام الفهرس: enumerate

عندما تحتاج إلى العنصر والفهرس الخاص به معًا، استخدم enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate ينتج (index, value) زوجًا نخصصه مباشرة لاثنين المتغيرات عبر tuple unpacking (سنرى ذلك في الوحدة المخصصة لـ هياكل البيانات).

تكرار تسلسلين بالتوازي: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip يتوقف عند أقصر تسلسل.

range() وكسل بايثون

في لغة Python، لا تخصص الدالة range() قائمة فعلية في الذاكرة: فهي تُرجع مولدًا كسولًا ينتج أرقامًا واحدة تلو الأخرى حسب الطلب (على سبيل المثال، في حلقة for). وهذا يسمح بالتكرار على ملايين الأعداد الصحيحة دون زيادة حجم ذاكرة الوصول العشوائي. لفحص قيم النطاق كقائمة، يمكنك إرسالها بشكل صريح باستخدام list(range(5)).

جربه بنفسك

تمرين#python.m2.l1.e1
المحاولات: 0جارٍ التحميل…

احسب مجموع الأرقام من 1 إلى 100 (ضمناً) باستخدام حلقة for over range(...)، وقم بتعيينها إلى "total" وتقييمها.

جارٍ تحميل المحرر…
إظهار التلميح

النطاق (1، 101) يُنشئ 1، 2، ...، 100 (حصريًا على اليمين).

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m2.l1.e2
المحاولات: 0جارٍ التحميل…

بالنظر إلى القائمة `words = ['uno', 'due', 'tre']`، أنشئ قائمة `أزواج` من السلاسل مثل '0:uno'، و'1:due'، و'2:tre' باستخدام التعداد. تقييم "أزواج".

جارٍ تحميل المحرر…
إظهار التلميح

تعداد (كلمات) يُرجع (فهرس، قيمة) في كل تكرار.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m2.l1.e3
المحاولات: 0جارٍ التحميل…

Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم النطاق (2، 21، 2) للتكرار فقط على الأعداد الصحيحة الزوجية من 2 إلى 20.

الحل متاح بعد 3 من المحاولات