الدرس 18 من دورة Python للمبتدئين

استخدام while: أعد السؤال حتى تكون الإجابة صحيحة

في الدرس السابق تعلمنا تنظيف إدخال المستخدم. الآن سنجعل البرنامج أكثر احترافية: إذا كتب المستخدم إجابة غير صحيحة، لا ينتهي البرنامج، بل يعيد السؤال حتى يحصل على yes أو no.

المستوى: مبتدئ جدًا النتيجة: تكرار السؤال حتى صحة الإدخال مدة التطبيق: 30 - 35 دقيقة
طريقة CIT للتعلم الهادئ: لا تنظر إلى while ككود مخيف. فكر فيها كجملة بسيطة: طالما لم تصل للإجابة الصحيحة، أعد السؤال.
مهم قبل البداية: while قد تسبب تكرارًا لا ينتهي إذا لم نضع طريقة للخروج منها. لذلك سنتعلم معها break، وهي الكلمة التي توقف الحلقة عندما نصل إلى المطلوب.

ما النتيجة التي يجب أن تخرج بها؟

في نهاية الدرس ستفهم هذا الكود:

while True:
    answer_text = input("اكتب yes أو no: ")
    answer = answer_text.strip().lower()

    if answer == "yes" or answer == "no":
        break

    print("إجابة غير صحيحة، حاول مرة أخرى")

معنى الكود: اسأل المستخدم، نظف إجابته، إذا كانت yes أو no اخرج من الحلقة، وإذا كانت غير ذلك أعد السؤال.

while تستخدم لتكرار أمر معين.
True تجعل الحلقة تعمل باستمرار.
break توقف الحلقة عند تحقق المطلوب.
خريطة درس while في Python
تدفق while في Python
1

لماذا نحتاج while؟

بدون while، إذا كتب المستخدم إجابة غير صحيحة، قد ينتهي البرنامج مباشرة.

لكن في البرامج الأفضل، لا نترك المستخدم يضيع من أول خطأ. نعيد له السؤال ونوضح له المطلوب:

إجابة غير صحيحة، حاول مرة أخرى
الفكرة ببساطة: while تجعل البرنامج يكرر جزءًا من الكود حتى يحدث شيء معين يوقف التكرار.
تحقق قبل الانتقال ✅ هل فهمت أن while تساعدنا على إعادة السؤال بدل إنهاء البرنامج؟
2

أنشئ ملف الدرس الثامن عشر

افتح مجلد الدورة داخل VS Code:

python_course

ثم أنشئ ملفًا جديدًا باسم:

lesson_18.py

افتح الملف داخل Editor.

توقف لحظة ✅ هل ظهر ملف lesson_18.py داخل Explorer؟ إذا نعم، انتقل للخطوة التالية.
3

جرّب while بسيطة

اكتب هذا المثال البسيط:

counter = 1

while counter <= 3:
    print("تكرار رقم", counter)
    counter = counter + 1

النتيجة:

تكرار رقم 1
تكرار رقم 2
تكرار رقم 3
ماذا حدث؟ بدأ counter بقيمة 1. طالما counter أقل من أو يساوي 3، يطبع البرنامج ويزيد counter واحدًا.
انتبه: لو نسيت السطر counter = counter + 1، قد تستمر الحلقة إلى ما لا نهاية؛ لأن قيمة counter لن تتغير.
تحقق قبل الانتقال ✅ هل فهمت أن while تحتاج شرطًا يتغير في النهاية؟
4

ما معنى while True؟

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

لذلك نستخدم:

while True:

معناها: كرر باستمرار، إلى أن أوقفك أنا باستخدام break.

مهم جدًا: لا تستخدم while True بدون break أو بدون طريقة واضحة للخروج، لأن البرنامج قد يستمر في التكرار بلا نهاية.
سؤال سريع 🧠 لماذا نحتاج break مع while True؟ حتى نوقف الحلقة عندما نحصل على إدخال صحيح.
5

اكتب حلقة تسأل عن yes أو no

الآن اكتب:

while True:
    answer_text = input("اكتب yes أو no: ")
    answer = answer_text.strip().lower()

    if answer == "yes" or answer == "no":
        break

    print("إجابة غير صحيحة، حاول مرة أخرى")
خريطة كود while للتحقق من الإدخال

لاحظ ترتيب التفكير:

اسأل المستخدم
نظف الإجابة
افحص هل هي yes أو no
إذا نعم: اخرج من الحلقة
إذا لا: اطبع رسالة وأعد السؤال
تحقق قبل الانتقال ✅ هل فهمت أن print الأخير يظهر فقط عندما تكون الإجابة غير صحيحة؟
6

ما وظيفة break؟

break تعني: اخرج من الحلقة الآن.

شرح break في while Python

في كودنا، عندما تكون الإجابة yes أو no، لا نحتاج إلى إعادة السؤال. لذلك نستخدم break.

قاعدة سهلة: while تكرر، و break توقف التكرار.
سؤال سريع 🧠 إذا كتب المستخدم yes، هل نطبع رسالة الخطأ؟ لا، لأن break يوقف الحلقة قبل الوصول إلى رسالة الخطأ.
7

اختبر الحلقة بمدخلات خاطئة

شغل البرنامج وجرب:

maybe
ok
YES

المتوقع:

maybe → إجابة غير صحيحة، حاول مرة أخرى
ok    → إجابة غير صحيحة، حاول مرة أخرى
YES   → تتحول إلى yes ثم تخرج من الحلقة
ماذا تعلمت؟ البرنامج لم ينهار ولم ينتهِ عند أول خطأ. استمر في السؤال حتى حصل على إجابة صحيحة.
توقف لحظة ✅ هل اختبرت إجابة خاطئة ثم إجابة صحيحة؟ لا تعتمد الدرس قبل اختبار الحالتين.
8

طبّقها على برنامج التذكرة

الآن نستخدم while داخل برنامج الدخول:

age = int(input("اكتب عمرك: "))
ticket_prompt = "هل لديك تذكرة؟ yes/no: "

while True:
    has_ticket_text = input(ticket_prompt)
    has_ticket = has_ticket_text.strip().lower()

    if has_ticket == "yes" or has_ticket == "no":
        break

    print("اكتب yes أو no فقط")

if age >= 18 and has_ticket == "yes":
    print("مسموح بالدخول")
else:
    print("غير مسموح بالدخول")
برنامج دخول أكثر احترافية باستخدام while
هذه خطوة احترافية: قبل أن نحكم على الدخول، تأكدنا أولًا أن إجابة التذكرة صحيحة ومفهومة.
تحقق قبل الانتقال ✅ هل فهمت أن شرط الدخول النهائي يأتي بعد التأكد من صحة إدخال التذكرة؟
9

اختبر برنامج الدخول الجديد

جرّب هذه الحالة:

اكتب عمرك: 20
هل لديك تذكرة؟ اكتب yes أو no: ربما
اكتب yes أو no فقط
هل لديك تذكرة؟ اكتب yes أو no: YES
مسموح بالدخول

ثم جرّب:

اكتب عمرك: 20
هل لديك تذكرة؟ اكتب yes أو no: no
غير مسموح بالدخول
ماذا تعلمت؟ البرنامج صار يتحقق من الإدخال أولًا، ثم يستخدم الإدخال الصحيح لاتخاذ القرار.
توقف لحظة ✅ هل اختبرت إدخالًا خاطئًا ثم yes؟ وهل اختبرت no؟
10

تحدي صغير: تحقق من VIP أيضًا

اكتب حلقة ثانية تسأل عن VIP بنفس الطريقة:

vip_prompt = "هل لديك VIP؟ yes/no: "

while True:
    is_vip_text = input(vip_prompt)
    is_vip = is_vip_text.strip().lower()

    if is_vip == "yes" or is_vip == "no":
        break

    print("اكتب yes أو no فقط")

ثم اجمعها مع القرار:

old_enough = age >= 18
has_access = has_ticket == "yes" or is_vip == "yes"

if old_enough and has_access:
    print("مسموح بالدخول")
else:
    print("غير مسموح بالدخول")
هدف التحدي: بناء برنامج أقرب للواقع: لا يقبل إجابة غير مفهومة، ثم يتخذ القرار بناءً على بيانات نظيفة.
تحدي التفكير 🧠 إذا كتب المستخدم maybe في VIP، هل يجب أن يستمر البرنامج؟ نعم، حتى يكتب yes أو no.

اختبار نهاية الدرس

قبل الانتقال للدرس القادم، تأكد أنك فهمت هذه النقاط:

✅ فهمت أن while تكرر جزءًا من الكود.
✅ فهمت أن while True تحتاج break.
✅ عرفت أن break توقف الحلقة.
✅ استخدمت strip و lower داخل الحلقة.
✅ جعلت البرنامج يعيد السؤال عند الإدخال الخاطئ.
✅ اختبرت إجابات خاطئة وصحيحة.
✅ حسّنت برنامج التذكرة باستخدام while.
✅ بدأت تكتب برنامجًا يتحقق من المدخلات قبل اتخاذ القرار.
إذا فهمت هذه النقاط: فأنت انتقلت خطوة كبيرة نحو البرامج الاحترافية؛ لأن البرنامج الآن لا يعتمد على أن المستخدم سيكتب دائمًا بشكل صحيح.

خلاصة الدرس

تعلمنا أن while تستخدم للتكرار، وأن while True تجعل التكرار مستمرًا حتى نستخدم break. استخدمنا ذلك لإعادة السؤال حتى يكتب المستخدم yes أو no.

تذكر القاعدة:

while True:
    اسأل المستخدم
    نظف الإدخال
    إذا كان صحيحًا:
        break
    أخبره أن يحاول مرة أخرى

في الدرس القادم سنبني على while ونتعلم كيف نكرر أكثر من عملية، ونبدأ الاقتراب من مشروع نهائي منظم.