مضى على الشبكة و يوم من العطاء.

الدرس السابع: الجمل التكرارية (Loop Statments)

RTH

Developer

السمعة:

بسم الله الرحمن الرحيم
اللهم علّمنا ما ينفعنا وانفعنا بما علّمتنا إنك أنت العليم الحكيم


أتمنى أن تكونوا جميعًا بخير , أود أن أعتذر لكم عن هذا الغياب الطويل في شرح الدروس في الفترة الأخيرة. إن شاء الله سنكمل اليوم ما بدأنا به في تعلم لغة البايثون.
سنتحدث في هذا الدرس عن الجمل التكرارية في أنواعها المختلفة وسُنناقش كيفية استخدام كل نوع بشكلٍ مُفصل.

بدايةً يمكننا تعريف الجمل التكرارية بأنها من الجمل الأساسية في أي لغة برمجة حيث توفر على المبرمج وقت وجهد في تكرار أمر معين داخل الشيفرة البرمجية (code).

تستخدم الحلقات كأداة قوية لتكرار تنفيذ جزء من الشيفرة البرمجية عدة مرات دون الحاجة لكتابة الشيفرة البرمجية نفسها مرارًا وتكرارًا.


لتوضيح الهدف من الجمل التكرارية بشكل أفضل , لنأخذ المثال التالي:
لنفرض أن لدي 100 طالب, نريد أن ندخل بعض المعلومات الشخصية لهم مثل الاسم ,رقم الهاتف والعمر. بالطريقة التقليدية سنحتاج إلى كتابة كود طلب المعلومات من المستخدم 100مرة
وهذا يعد مكلف جدًا بالنسبة للمبرمج من ناحية الوقت والجهد. ولكن إذا استخدمنا الحلقات التكرارية لن نحتاج إلى كتابة الكود إلا مرة واحدة وتكراره بعدد محدد من قبل المبرمج.

WhatsApp Image 2024-09-13 at 8.41.28 PM.webp


هناك نوعان أساسيان من الحلقات التكرارية في لغة بايثون وهما:
1. While Loop
2. For Loop


تستخدم حلقة الـ while لتكرار الشيفرة البرمجية بناءًا على شرط معين ويجب أن يكون صحيح. وتستمر في التكرار إلى أن يصبح الشرط خاطئًا.

يكون الشكل العام لحلقة الـ while كالتالي:

Python:
while condition :
//do something.

else:
// do anothet thing when condition become false.

دعونا نلقي نظرة على المثال التالي:
تخيل أنك تبني نظاماً للتحقق من كلمة المرور، وتريد الاستمرار في طلب كلمة المرور حتى يدخل المستخدم الكلمة الصحيحة.


Python:
correct_password = "python123"
user_input = ""


while user_input != correct_password:
    user_input = input("please insert the password: ")
    if user_input == correct_password:
        print("The password is correct, welcome!")
    else:
        print("The password is incorrect, try again.")

هنا نستخدم حلقة while , لأنها تمكننا من إدخال كلمة المرور بعدد غير محدود بحيث أنها تستمر في التكرار حتى يصبح الشرط (تطابق كلمة المرور) صحيحاً. ويكون ناتج التنفيذ كالتالي:

Python:
please insert the password: sa45
The password is incorrect, try again.
please insert the password: dra55
The password is incorrect, try again.
please insert the password: python123
The password is correct, welcome!

في المثال السابق، رأينا كيف يمكن للبرنامج تنفيذ مهام معينة طالما أن هناك شرطاً محدداً صحيح. لكن ماذا لو كان لدينا برنامج أكثر تعقيدًا حيث يمكن للعديد من الأحداث المختلفة أن تؤدي إلى توقف البرنامج عن العمل؟
على سبيل المثال إذا أردنا أن نزيد من أمان الموقع بإعطاء المستخدم عدد محدد من المحاولات لإدخال كلمة المرور, فهنا نحتاج إلى متغير يُسمى "العلم" (flag)

وأيضًا إذا كان هناك العديد من الشروط التي قد تؤدي إلى توقف البرنامج، يصبح من الصعب التحقق من كل هذه الشروط في جملة واحدة باستخدام while. لذا، يمكننا استخدام متغير واحد يُحدد ما إذا كان البرنامج نشطًا أم لا. هنا أيضًا نحتاج إلى "العلم" (flag)، ليعمل كإشارة للبرنامج.


Flag: مفهوم يُستخدم لتنظيم كيفية توقف البرنامج عن العمل عند حدوث مجموعة من الشروط أو الأحداث المعقدة.

إليكم هذا المثال لفهم الـ Flag بشكل أفضل:


Python:
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
active = True     #this is flag
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)

يكون ناتج التنفيذ كالتالي:

Python:
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. python
python

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit

تدريب 1: قم بكتابة برنامج يقوم بحساب مجموع الأعداد المدخلة من قبل المستخدم طالما أن المستخدم لم يدخل الرقم 0 (عند إدخال الرقم 0 سيتم إنهاء الحلقة).


تستخدم الحلقة For عندما تكون على علم مسبق بعدد التكرارات أو تريد التكرار على عناصر مجموعة.

يكون الشكل العام لحلقة الـ For كالتالي:

Python:
for item in iterable:
#do something with item

else:
#do another thing when for is finish.

تخيل أنك تدير متجرًا إلكترونيًا وتريد حساب الخصم على كل منتج في قائمة المنتجات لديك.

Python:
products = [100, 200, 150, 300]  # list of price.
discount_rate = 0.1

for price in products:
    discounted_price = price * (1 - discount_rate)
    print(f"Price after discount: {discounted_price}")
else:
print("the products are expired ")

هنا نستخدم حلقة for , لأننا نعرف مسبقاً عدد المنتجات التي نريد معالجة أسعارها (عدد العناصر في القائمة). تقوم الحلقة بتطبيق الخصم على كل سعر من قائمة المنتجات.

وهذه هي نتيجة التنفيذ:


Python:
Price after discount: 90.0
Price after discount: 180.0
Price after discount: 135.0
Price after discount: 270.0
the products are expired

يمكن استخدام Keyword (else) في لغة بايثون فقط مع الجمل التكرارية. ويتم تنفيذ ما بداخلها إذا انتهت الحلقة بشكل طبيعي.إن لم نرغب باستخدام else مع الـ while لن يحدث أي خلل في تنفيذ البرنامج.

🔰 هناك ميزة إضافية لحلقة التكرار For تسمى Range:
تستخدم لإنشاء تسلسل من الأرقام بحيث يمكن تحديد البداية والنهاية والخطوة. كما سنشاهد في المثال التالي:


Python:
for i in range(5):
    print(i)

هنا سيتم إنشاء تسلسل من الأرقام من 0 إلى 4 وتقوم الحلقة بطباعته. ويكون الناتج كما يلي:
Python:
0
1
2
3
4

كما يمكننا أن نستخدم ميزة الـ Range بشكلٍ آخر, كما سنشاهد في المثال التالي:

Python:
for i in range(2, 10, 2):
    print(i)

في هذا المثال سيتم طباعة أرقام تبدأ بـ2 وتنتهي قبل الـ 10 بزيادة 2 في كل خطوة. كما هو موضح بالأسفل:
Python:
2
4
6
8

تدريب 2: قم بكتابة برنامج يقوم بحساب مجموع الأعداد من 1 إلى 10 .


fa.webp


إن استخدام الجمل التكرارية أمر ليس بهذه البساطة, حيث يمكننا أن نستخدم حلقة بداخل حلقة أُخرى وهذا ما يسمى بالـ Nested Loop

Python:
for i in range(3):
    for j in range(2):
        print(f"i: {i}, j: {j}")

في هذا المثال , الحلقة الداخلية تعمل مرتين لكل دورة من دورات الحلقة الخارجية وتقوم بطباعة جميع القيم الممكنة كما هو موضح بالتالي:

Python:
i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1

هذا مثال آخر لعمل الـ Nested Loop في الحلقة while:

Python:
i = 1
while i <= 3:
    j = 1
    while j <= 3:
        print(f"{i} * {j} = {i * j}", end='\t')
        j += 1
    print()
    i += 1

يكون الناتج لهذا الكود كالتالي:

Python:
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

تدريب 3: قم بكتابة برنامج يقوم بطباعة مثلث قائم الزاوية باستخدام النجوم (*) كما هو موضه بالناتج التالي:

WhatsApp Image 2024-09-13 at 10.52.37 PM.webp


fa.webp
Break and continue

تستخدم الـ Break لإنهاء الحلقة فورًا بينما تستخدم الـ continue لتخطي الجزء المتبقي من الكود في الدورة الحالية والانتقال إلى الدورة التالية.

وفي ما يلي أمثلة لتوضيح عمل كل منها:


Python:
for i in range(5):
    if i == 3:
        break
    print(i)

في هذا المثال, تطبع الحلقة الأرقام 0 و1 و2 ثم تتوقف عند الرقم 3 بسبب break.

Python:
for i in range(5):
    if i == 3:
        continue
    print(i)

أما في هذا المثال, تطبع الحلقة الأرقام 0 و1 و2 و4، وتتخطى الرقم 3 بسبب continue.

يمكننا أيضًا استخدام الـ Break والـ continue مع بعضهما في نفس الحلقة , كما في المثال التالي:


Python:
while True:
    user_input = int(input("Enter an integer (enter a negative number to end the program): "))
    if user_input < 0:
        print("A negative number is entered, the program terminates.")
        break
    if user_input % 2 == 0:
        continue
    print(f"The number of individual entries is: {user_input}")

في هذا المثال, تستمر الحلقة في التنفيذ إلى مالانهاية بسبب أن الشرط دائمًا صحيح. لكن في هذا المثال عندما يدخل المستخدم عدد سالب يتم إنهاء الحلقة بسبب استخدام Break أما إذا كان العدد المدخل موجبًا يتم تخطي طباعته بسبب Continue. ويكون الناتج كما يلي:

Python:
Enter an integer (enter a negative number to end the program): 2
Enter an integer (enter a negative number to end the program): 3
The number of individual entries is: 3
Enter an integer (enter a negative number to end the program): 5
The number of individual entries is: 5
Enter an integer (enter a negative number to end the program): 8
Enter an integer (enter a negative number to end the program): -4
A negative number is entered, the program terminates.

fa.webp


تدريب 4: قم بكتابة برنامج للبحث عن بحث أولي (هو عدد أكبر من 1 ولا يقبل القسمة إلا على نفسه وعلى العدد 1).


وهكذا نكون قد أنهينا درسنا لهذا اليوم. أتمنى أن يكون واضح ومفهوم. وإذا كان هناك أي استفسار أرجوا تركها بالتعلقات.

دُمتم بحفظ الله ورعايته
 
يعطيكم ألف عافية، وربنا يبلغكم أعلى المراتب في الدنيا والآخرة
ابداع وترتيب وتنسيق لا يوصف ! 🤍🤍
 
  • Love
التفاعلات: RTH
تدريب 1: قم بكتابة برنامج يقوم بحساب مجموع الأعداد المدخلة من قبل المستخدم طالما أن المستخدم لم يدخل الرقم 0 (عند إدخال الرقم 0 سيتم إنهاء الحلقة).

1726305571264.webp


تدريب 2: قم بكتابة برنامج يقوم بحساب مجموع الأعداد من 1 إلى 10

1726305787323.webp

تدريب 3: قم بكتابة برنامج يقوم بطباعة مثلث قائم الزاوية باستخدام النجوم (*) كما هو موضه بالناتج التالي:

1726305999436.webp


بارك الله فيك وجزاك الله كل خير
 
  • Love
التفاعلات: RTH
يعطيكم ألف عافية، وربنا يبلغكم أعلى المراتب في الدنيا والآخرة
ابداع وترتيب وتنسيق لا يوصف ! 🤍🤍
الله يعافيكِ
شكرًا لكلامك
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى