الحلقات في بايثون
حلقة: تعني Loop في اللغة الإنجليزية. نستخدم الحلقات لعدم تكرار نفس الكود عدة مرات, إذاً أي كود نريده أن يتنفذ عدة مرات, نقوم بكتابته داخل حلقة فتقوم هي بإعادة تنفيذ الكود قدر ما شئنا ضمن شروط معينة نقوم نحن بتحديدها.
طريقة تنفيذ الأوامر و الحلقات في الذاكرة في بايثون
الأوامر في العادة تتنفذ بتسلسل وراء بعضها, و لكن الحلقات تجعل سهم تنفيذ الأوامر يقف عندها فيقوم بتنفيذ الأوامر التي بداخلها عدة مرات , و بعد أن يخرج من الحلقة يعود و يكمل تنفيذ باقي الأوامر التي تليها, كما في الصورة التالية:
كيفية الوصول للأشياء التي تم تعريفها بداخل الحلقة من الخارج في بايثون
في أغلب لغات البرمجة لا يمكن الوصول للأشياء التي تم تعريفها داخل الحلقة من الخارج, أما في بايثون فإنه بإمكانك الوصول لهم .
مثال
# بعدها سيتم عرضه .sad هنا قمت بإنشاء سلسلة من الأرقام الموجودة بين 1 إلى 9. في كل دورة في الحلقة سيتم جلب رقم من هذه السلسلة و تخزينه في المتغير for sad in range(1, 9): print(sad) # بعد أن توقفت الحلقة sad هنا عرضنا القيمة الموجودة في المتغير print('sad contains:', sad )
•سنحصل على المخرجات التالية عند التنفيذ
2
3
4
5
6
7
8
9
sad contains: 9
•إذاً لاحظنا أننا استطعنا معرفة القيمة الأخيرة التي تم وضعها في المتغير sad
الذي تم تعريفه في الأساس بداخل الحلقة for
خارجها.
python الحلقة for
في بايثون
نستخدم الحلقة for
للمرور على جميع عناصر السلسلة أو المصفوفة بسهولة بدون الحاجة لتعريف عداد و تحديد أين يبدأ و أين ينتهي.
تستخدم لتنفيذ الكود عدة مرات محددة.
الصيغة العامة ل الحلقة for في بايثون
for element in sequence: statements
element: هو متغير عادي او ما يسمى العداد نقوم بتعريفه بداخل الحلقة . في كل دورة سيتم جلب قيمة من قيم السلسلة الموضوعة بعده و وضعها فيه.
sequence: هي السلسلة أو المصفوفة التي نريد الوصول لجميع عناصرها.
statements: هي الأوامر الموضوعة في الحلقة و هي تتنفذ في كل دورة .
إذاً هنا تقوم الحلقة بالمرور على جميع عناصر المصفوفة بالترتيب من العنصر الأول إلى العنصر الأخير , و في كل دورة تقوم بتخزين قيمة العنصر في المتغير الذي قمنا بتعريفه.
الحلقة for
في بايثون تعمل كما تعمل الحلقة ForEach
في لغات البرمجة الأخرى.
أمثلة حول الحلقة for
في بايثون
سوف أقوم الآن بتنفيذ برنامج يعرض قيم جميع عناصر مصفوفة باستخدام الحلقة for
.
# تحتوي على 7 عناصر myname هنا قمت بتعريف مصفوفة إسمها days = ['Saddam', 'Saleh', 'Farea', 'Mogbel', 'Mohamed', 'Alatai', 'Alawiri'] # بعدها سيتم عرض قيمته ,name في المتغير myname هنا في كل دورة سيتم تخزين قيمة عنصر جديد من عناصر المصفوفة for name in myname: print(name)
•سنحصل على المخرجات التالية عند عند التنفيذ
Saleh
Farea
Mogbel
Mohamed
Alatai
Alawiri
في هذا المثال اللاحق ايضا سنقوم الآن بكتابة برنامج يمر على أحرف النص و يعرضهم حرفاً حرفاً باستخدام الحلقة for
.
معلومة: النص بطبيعته يمثل سلسلة من الأحرف لذلك بايثون تتيح لك فعل هذا بسهولة .
# هنا قمت بتعريف متغير يحتوي على نص, أي يحتوي على سلسلة من الأحرف alawiri = 'Alawiri Saddam' # بعدها سيتم عرضه .alawiri في كل دورة في الحلقة سيتم جلب حرف من هذا النص و تخزينه في المتغير
for letter in alawiri:
print(letter)
•سنحصل على النتيجة التالية عند التشغيل
l
a
w
i
r
i
S
a
d
d
a
m
شرح الدالة range()
سنستخدم الدالة range()
في الأمثلة التالية لأنها ترجع سلسلة من الأرقام.
عند إستدعاء هذه الدالة يجب تمرير قيمة, أو قيمتين, أو ثلاث قيم لها كـ Arguments.
في حال مررت لها قيمة واحدة مثل range(5)
فإنها سترجع سلسلة من الأرقام تبدأ من 0 إلى 4.
إذاً سترجع 0 ثم 1 ثم 2 ثم 3 ثم 4.
في حال مررت لها قيمتين مثل range(1, 5)
فإنها سترجع سلسلة من الأرقام تبدأ من 1 إلى 4.
إذاً سترجع 1 ثم 2 ثم 3 ثم 4.
في حال مررت لها ثلاث قيم مثل range(1, 5, 2)
فإنها سترجع سلسلة من الأرقام تبدأ من 1 إلى 4 و تزيد إثنين كل مرة.
إذاً سترجع 1 ثم 3.
طريقة إستخدام الدالة range()
مع الحلقة for
في بايثون
المثال التالي يشرح طريقة إستخدام الدالة range()
لجعل الحلقة for
كأنها تعدّ .
مثال يوضح طريقة إستخدام الدالة range()
لجعل الحلقة for
كأنها تعدّ
# بعدها سيتم عرضه .n هنا قمنا بإنشاء سلسلة من الأرقام الموجودة بين 1 إلى 5. في كل دورة في الحلقة سيتم جلب رقم من هذه السلسلة و تخزينه في المتغير for n in range(1, 6, 1): print(n)
•سنحصل على النتيجة التالية عند التشغيل
2
3
4
5
ملاحظة: هنا كان يمكننا كتابة range(1, 6)
بدلاً من كتابة range(1, 6, 1)
و الحصول على نفس النتيجة.
المثال التالي يشرح طريقة إستخدام الدالة range()
لجعل الحلقة for
كأنها تعدّ بشكل عكسي, أي تبدأ من أكبر عدد فيها إلى أصغر عدد فيها.
مثال يشرح طريقة إستخدام الدالة range()
لجعل الحلقة for
كأنها تعدّ بشكل عكسي
# بعدها سيتم عرضه .n هنا قمنا بإنشاء سلسلة من الأرقام الموجودة بين 5 إلى 1. في كل دورة في الحلقة سيتم جلب رقم من هذه السلسلة و تخزينه في المتغير for n in range(5, 0, -1): print(n)
•سنحصل على النتيجة التالية عند التشغيل
4
3
2
1
الـ -1
الموضوعة في الدالة range()
تعني أن سلسلة الأرقام تقل واحداً في كل مرة.
لهذا السبب وجدنا أن الدالة range()
أرجعت سلسلة الأرقام التالية: 5, 4, 3, 2, 1.
python الحلقة while
في بايثون
نستخدم الحلقة while
إذا كنا نريد تنفيذ الكود عدة مرات, ولكننا لا نعرف كم مرة بالتحديد لأننا نريد إيقاف التنفيذ إذا تحقق شرط معين .
هذه الحلقة تتوقف عن تكرار نفسها إذا تحقق الشرط الذي وضعناه لها.
هنا كأننا نقول: " طالما أن الشرط لم يتحقق إستمر في تكرار الكود ".
الصيغة العامة ل الحلقة while
في بايثون
initialisation; while condition: statements increment أو decrement;
initialisation: هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة .
في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ) .condition: هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة.
في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة, في كل دورة يتم التأكد أولاً إذا تحقق هذا الشرط أم لا.
هنا طالما أن نتيجة الشرط تساويtrue
سيعيد تكرار الكود.statements: هي الخطوة الثالثة, و تعني تنفيذ جميع الأوامر الموجودة في الحلقة و هي تتنفذ في كل دورة.
(decrement أو increment): هي الخطوة الرابعة و الأخيرة, و هي تتنفذ في كل دورة.
هنا نحدد كيف تزداد أو تنقص قيمة العداد.
تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة, و السبب أننا لا نحتاج إلى تعريف عداد جديد في كل دورة, بل نستعمل العداد القديم و الذي من خلاله نعرف في أي دورة أصبحنا.
مثال حول الحلقة while
في بايثون
في المثال التالي قمنا بتعريف حلقة تطبع جميع الأرقام من 1 إلى 10.
في البداية قمنا بتعريف متغير إسمه i
و أعطينها القيمة 1 لأننا سنستخدمه كعداد في الحلقة.
بعدها قمنا بإنشاء حلقة while
تظل تنفذ الأوامر الموضوعة فيها طالما أن قيمة العداد i
لا تزال أصغر أو تساوي 10.
في كل دورة في هذه الحلقة سيتم طباعة قيمة العداد i
ثم إضافة 1 على قيمته.
تمرين
i = 1 while i <= 10: print(i) i += 1
•سنحصل على المخرجات التالية عند التنفيذ .
2
3
4
5
6
7
8
9
10
في المثال التالي قمنا بتعريف حلقة تناقص تطبع جميع الأرقام من 10 إلى 1 على عكس المثال السابق .
في البداية قمنا بتعريف متغير إسمه i
و أعطينها القيمة 10 لأننا سنستخدمه كعداد تناقص في الحلقة.
بعدها قمنا بإنشاء حلقة while
تظل تنفذ الأوامر الموضوعة فيها طالما أن قيمة العداد i
لا تزال أكبر أو يساوي 1.
في كل دورة في هذه الحلقة سيتم طباعة قيمة العداد i
ثم انقاص 1 قميته قيمته.
تمرين
i = 10
while i >= 1: print(i) i -= 1
•سنحصل على المخرجات التالية عند التنفيذ .
9
8
7
6
5
4
3
2
1
مثال حول إستخدام الجملة الشرطية else
مع الحلقة while
في بايثون
يمكنك وضع الجملة الشرطية else
مباشرةً بعد الحلقة while
لتنفيذ بلوك من الكود ( مجموعة أوامر ) مباشرةً عندما تتوقف الحلقة عن إعادة تنفيذ الكود الموضوع فيها, أي عندما يصبح جواب الشرط الذي يجعلها تستمر في إعادتها نفسها طالما هو True
يساوي False
.
تمرين
i = 1 while i <= 10: print(i) i += 1 else: print('This block is executed when the condition return False!')
•سنحصل على النتيجة التالية عند التشغيل.
2
3
4
5
6
7
8
9
10
This block is executed when the condition return False!
تذكر: الكود الموضوع في بلوك الجملة else
سيتنفذ دائماً بعد أن تتوقف الحلقة عن العمل, و سيتنفذ أيضاً حتى لو تتنفذ الحلقة من الأساس.
لتتأكد من هذا الأمر, قم بإعطاء المتغير i
القيمة 100
بدل القيمة 1 و لاحظ أيضاً أنه سينفذ أمر الطباعة الموضوع في البلوك else
.
شرح طريقة إنشاء حلقة لا تتوقف (Infinite Loop) في بايثون
قبل تجربة الأمثلة التالية على الحاسوب عليك معرفة أن الـ (Infinite Loop) قد تجعله يعلّق أو قد تسبب في حرق المعالج إذا لم يتم إيقاف الكود يدوياً خلال وقت قصير.
الصورة التالية توضح طريقة إيقاف أي برنامج يدوياً بعد أن يتم تشغيله.
التمرين الأول .
while 1 == 1: print('I am stuck!')
•سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
التمرين الثاني
while True: print('I am stuck!')
•سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
التمرين الثالث
flag = True while flag = True: print('I am stuck!')
•سنحصل على النتيجة التالية عند التشغيل.
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!
I am stuck!