حلقات while — التكرار طالما تحقق الشرط
تكرار العمل، كيف تحدث الحلقات اللانهائية وكيفية إيقافها، أوامر break و continue، وإعادة السؤال حتى إدخال قيمة صحيحة.
- 1المشكلة
- 2الفهم
- 3أمثلة محلولة
- 4التوقع
- 5التطبيق
- 6التحدي
المشكلة التي نقوم بحلها
في الدرس السابق تعلمنا كيفية التقاط المدخلات غير الصالحة — فعندما يكتب شخص ما twenty، يستطيع البرنامج أن يطبع: "هذا ليس رقماً".
ولكن ماذا يفعل البرنامج بعد طباعة ذلك؟ يتوقف تماماً! ويضطر المستخدم لتشغيل البرنامج من البداية. لا يوجد برنامج حقيقي يعمل بهذه الطريقة — فالبرامج الحقيقية تُعيد السؤال وتستمر في ذلك حتى تحصل على إجابة صحيحة مقبولة.
هذا هو الهدف من الحلقات التكرارية (Loops): تكرار نفس العمل طالما كانت هناك حاجة إليه. اليوم سنتعلم حلقة while، والتي تستمر في التنفيذ طالما بقي الشرط صحيحاً (True).
في نهاية هذا الدرس ستكون قادراً على
- كتابة حلقة
whileومعرفة متى ستتوقف بدقة - فهم أسباب حدوث الحلقات اللانهائية وإيقافها باستخدام
Ctrl + C - تجميع القيم والعدادات داخل الحلقة
- استخدام
breakوcontinueفي الأماكن المناسبة - مواصلة السؤال حتى تصبح المدخلات صالحة
المتطلبات السابقة: اتخاذ القرارات — if و elif و else.
أبسط صورة لحلقة while
count = 3
while count > 0:
print(count)
count = count - 1
print("Go")3
2
1
Goالشكل يشبه تماماً جملة if — شرط، نقطتان رأسيتان، وكتلة مُزاحة بمسافة بادئة. الفرق الجوهري هو: if تفحص الشرط مرة واحدة فقط؛ بينما while تعيد فحص الشرط في كل مرة تنتهي فيها من تنفيذ الكتلة البرمجية.
تتطلب كل حلقة تكرارية ثلاثة عناصر أساسية:
- قيمة ابتدائية — قبل الحلقة (
count = 3) - شرط استمرار — يحدد متى تستمر الحلقة (
count > 0) - تعديل وتغيير — أمر داخل الكتلة يؤدي في النهاية لجعل الشرط خاطئاً (
count = count - 1)
الحلقات اللانهائية (Infinite loops)
إذا سقط العنصر الثالث:
count = 3
while count > 0:
print(count)سيستمر هذا الكود في طباعة الرقم 3 إلى ما لا نهاية.
كيفية إيقاف البرنامج: اضغط Ctrl + C في الطرفية. سيتوقف البرنامج فوراً وتظهر رسالة KeyboardInterrupt.
الحلقات اللانهائية جزء طبيعي من تعلم البرمجة. كل مبرمج كتب حلقات لانهائية في بداياته. لا تقلق، فقط تذكر Ctrl + C. وعند كتابة أي حلقة، اسأل نفسك دائماً: "كيف سيصبح هذا الشرط زائفاً False؟"تجميع القيم (Accumulation)
أحد أهم استخدامات الحلقات هو حساب مجموع أو عداد:
total = 0
number = 1
while number <= 5:
total = total + number
number = number + 1
print("Sum of 1 to 5:", total)Sum of 1 to 5: 15المتغير total يُسمى "المُجمِّع" (Accumulator). لاحظ أنه يبدأ من خارج الحلقة بقيمة 0.
أمر break — الخروج الفوري
ينهي أمر break الحلقة فوراً دون انتظار فحص الشرط:
number = 1
while number <= 100:
if number % 7 == 0:
print("First multiple of 7:", number)
break
number = number + 1First multiple of 7: 7يتيح لنا أمر break استخدام النمط الشائع while True:
while True:
answer = input("Type 'quit' to exit: ").strip().lower()
if answer == "quit":
print("Goodbye")
break
print(f"You typed: {answer}")Type 'quit' to exit: hello
You typed: hello
Type 'quit' to exit: QUIT
Goodbyeأمر continue — تخطي الدورة الحالية
لا ينهي أمر continue الحلقة؛ بل يتخطى ما تبقى من الكتلة البرمجية في الدورة الحالية وينتقل فوراً للدورة التالية:
number = 0
while number < 10:
number = number + 1
if number % 2 == 0:
continue
print(number)1
3
5
7
9تنبيه: إذا كان سطر زيادة العداد (number = number + 1) يقع بعدcontinue، فسيتم تخطيه وتدخل الحلقة في تكرار لانهائي.
الاستمرار في السؤال حتى تصبح المدخلات صالحة
while True:
raw = input("Your age: ").strip()
if raw.isdigit():
age = int(raw)
break
print("Please type a whole number, digits only.")
print(f"Thank you. Age recorded as {age}.")Your age: twenty
Please type a whole number, digits only.
Your age: 22.5
Please type a whole number, digits only.
Your age: 22
Thank you. Age recorded as 22.مثال عملي متكامل
ملف shopping.py:
# Keep taking item prices until the user is done, then summarise
total = 0.0
item_count = 0
print("Enter item prices. Type 'done' to finish.")
while True:
entry = input("Price: ").strip().lower()
if entry == "done":
break
if entry == "":
print(" Nothing typed — try again.")
continue
# Accept only digits and at most one decimal point
if entry.replace(".", "", 1).isdigit():
price = float(entry)
total = total + price
item_count = item_count + 1
print(f" Added {price:.2f}. Running total {total:.2f}")
else:
print(f" '{entry}' is not a price. Try again.")
print()
if item_count == 0:
print("No items were entered.")
else:
average = total / item_count
print(f"Items : {item_count}")
print(f"Total : {total:.2f}")
print(f"Average : {average:.2f}")Enter item prices. Type 'done' to finish.
Price: 120
Added 120.00. Running total 120.00
Price: abc
'abc' is not a price. Try again.
Price: 85.5
Added 85.50. Running total 205.50
Price: done
Items : 2
Total : 205.50
Average : 102.75حالات الخطأ الشائعة
البرنامج لا يتوقف والنصوص تتوالى بسرعة اضغط Ctrl + C فوراً. ثم تأكد من وجود سطر تعديل الشرط داخل الحلقة.
الحلقة لم تنفّذ إطلاقاً الشرط كان خاطئاً منذ البداية. افحص القيمة الابتدائية.
IndentationError السطر الذي يلي while لم يُزح بمسافة بادئة صحيحة.
Step 4 of 6 — Predict
Check your understanding
What is the complete output of this loop?
count = 3
while count > 0:
print(count)
count = count - 1
print("Go")- A3 2 1 Go
- B3 2 1 0 Go
- C3 Go
- D2 1 0 Go
This program never stops. What is missing?
total = 0
number = 1
while number <= 5:
total = total + number
print(total)- AThere is no `number = number + 1` inside the loop, so the condition never becomes false
- B`total` was not initialised inside the loop
- CThe `while` should be an `if`
- DChanging `<=` to `<` in the condition would make it stop
With that continue in place, what does this loop print?
number = 0
while number < 5:
number = number + 1
if number == 3:
continue
print(number)- A1 2 4 5
- B1 2
- C1 2 3 4 5
- D1 2 4
Answering needs an account
Sign in to check your answers
The questions are above, and working them out in your head is the part that matters. Sign in to see the answers, the explanations and the three-level hints.
دورك الآن
اكتب لعبة تخمين الأرقام في ملف باسم guess.py:
- حدد رقماً سرياً ثابتاً في الكود بين 1 و 100
- اطلب من المستخدم تخمين الرقم، وأخبره في كل مرة "higher" إذا كان الرقم السري أكبر، أو "lower" إذا كان أصغر
- عند التخمين الصحيح، اطبع رسالة تهنئة واخرج من الحلقة
- اطبع عدد المحاولات التي استغرقها اللاعب
- في حال إدخال شيء ليس رقماً، لا تجعل البرنامج يتعطل — اطبع تنبيهاً وأعد السؤال
- تنتهي اللعبة بعد 7 محاولات فاشلة مع كشف الرقم السري.
There is more in this mission
What you read above is the complete mission — nothing was cut out of it. Pro adds:
- ما يحدث فعلياً في الكواليس — كيف ينفذ بايثون هذا الكود
- الحل الكامل للتمرين مشروحاً خطوة بخطوة
- تمارين إضافية أكثر صعوبة وتحدياً
- أسئلة المقابلات الوظيفية حول هذا الموضوع مع نموذج الإجابة
Step 6 of 6
التحدي — the chapter quiz
عشرة أسئلة متدرجة من السهل إلى الصعب. الأسئلة الأخيرة صعبة عن قصد.
Sign in to take the quiz