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

تكرار العمليات: اجمع عدة أسعار بدل سعر واحد

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

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

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

في نهاية الدرس ستفهم هذا البرنامج:

total = 0
items_count = 0
price_prompt = "سعر المنتج أو done: "

while True:
    price_text = input(price_prompt)
    price_text = price_text.strip().lower()

    if price_text == "done":
        break

    price = float(price_text)
    total = total + price
    items_count = items_count + 1

print(f"عدد المنتجات: {items_count}")
print(f"الإجمالي: {total:.2f} ريال")

هذا البرنامج يستقبل أسعارًا متعددة، وعندما يكتب المستخدم done يطبع عدد المنتجات والإجمالي.

total يحفظ مجموع الأسعار.
items_count يحفظ عدد المنتجات.
done كلمة توقف إدخال الأسعار.
خريطة درس تكرار العمليات في Python
تدفق جمع عدة أسعار باستخدام while
1

لماذا نحتاج تكرار العمليات؟

في الدروس السابقة تعاملنا غالبًا مع إدخال واحد: عمر واحد، سعر واحد، إجابة واحدة.

لكن البرامج الحقيقية لا تتوقف غالبًا عند عملية واحدة. مثال:

منتج بسعر 50
منتج بسعر 30
منتج بسعر 95.5
ثم اطبع الإجمالي
الفكرة ببساطة: while تجعلنا نكرر نفس العملية أكثر من مرة: اسأل عن سعر، أضفه، ثم اسأل مرة أخرى.
تحقق قبل الانتقال ✅ هل فهمت أننا نستخدم while هنا لتكرار إدخال الأسعار، وليس فقط لتصحيح إجابة خاطئة؟
2

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

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

python_course

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

lesson_19.py

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

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

جهّز متغير المجموع والعدد

قبل الحلقة نحتاج متغيرين:

total = 0
items_count = 0

لماذا نبدأ بالصفر؟ لأن البرنامج لم يستقبل أي سعر بعد، ولم يضف أي منتج بعد.

شرح total و items_count في Python
معنى total: هذا المتغير سيكبر مع كل سعر جديد.
معنى items_count: هذا المتغير سيزيد واحدًا مع كل منتج يتم إدخاله.
سؤال سريع 🧠 لماذا بدأنا total و items_count بالصفر؟ لأننا لم ندخل أي منتج بعد.
4

ابدأ حلقة while

الآن نكتب:

price_prompt = "سعر المنتج أو done: "

while True:
    price_text = input(price_prompt)
    price_text = price_text.strip().lower()

نحن نسأل المستخدم عن السعر، ثم ننظف النص باستخدام strip و lower.

لماذا lower؟ حتى لو كتب المستخدم DONE أو Done، نحولها إلى done ونفهم أنها أمر إنهاء.
تحقق قبل الانتقال ✅ هل فهمت أننا نقرأ السعر كنص أولًا لأن المستخدم قد يكتب رقمًا أو done؟
5

اخرج من الحلقة عند done

بعد تنظيف النص، نفحص:

if price_text == "done":
    break

معنى هذا الجزء: إذا كتب المستخدم done، توقف عن طلب الأسعار واخرج من الحلقة.

قاعدة سهلة: في هذا الدرس done هي كلمة الإنهاء، و break هي أمر الخروج من الحلقة.
سؤال سريع 🧠 إذا كتب المستخدم done، هل نحولها إلى float؟ لا، نخرج من الحلقة مباشرة.
6

حوّل السعر واجمعه

إذا لم يكتب المستخدم done، نفترض أنه كتب سعرًا:

price = float(price_text)
total = total + price
items_count = items_count + 1

هنا يحدث ثلاث أشياء:

float يحول النص إلى رقم
total يضيف السعر إلى المجموع
items_count يزيد عدد المنتجات واحدًا
انتبه: إذا كتب المستخدم كلمة غير رقمية وليست done، سيظهر خطأ. هذا طبيعي الآن، وسنتعلم لاحقًا كيف نعالج هذا الخطأ باستخدام try و except.
تحقق قبل الانتقال ✅ هل فهمت أن total لا يستبدل السعر القديم، بل يضيف السعر الجديد إلى المجموع؟
7

اكتب الكود الكامل

الآن اكتب الكود الكامل داخل ملف lesson_19.py:

اكتب أولًا جزء استقبال الأسعار وجمعها:

total = 0
items_count = 0
price_prompt = "سعر المنتج أو done: "

while True:
    price_text = input(price_prompt)
    price_text = price_text.strip().lower()

    if price_text == "done":
        break

    price = float(price_text)
    total = total + price
    items_count = items_count + 1

ثم اكتب التقرير خارج الحلقة:

print("----- تقرير المشتريات -----")
print(f"عدد المنتجات: {items_count}")
print(f"الإجمالي: {total:.2f} ريال")
print("----------------------------")
خريطة كود جمع عدة أسعار في Python

احفظ الملف:

Ctrl + S

ثم شغله:

python lesson_19.py

وإذا لم يعمل أمر python:

py lesson_19.py
تحقق قبل الانتقال ✅ هل اشتغل البرنامج وبدأ يطلب أسعار المنتجات؟
8

اختبر البرنامج بعدة أسعار

جرّب الإدخالات التالية:

50
30
95.5
done

النتيجة المتوقعة:

----- تقرير المشتريات -----
عدد المنتجات: 3
الإجمالي: 175.50 ريال
----------------------------
تقرير جمع الأسعار في Python
ماذا تعلمت؟ البرنامج لم يحسب سعرًا واحدًا فقط. أصبح يستقبل عدة أسعار ثم يعطي تقريرًا نهائيًا.
توقف لحظة ✅ هل اختبرت ثلاثة أسعار ثم كتبت done؟ لا تعتمد الدرس قبل تجربة هذا السيناريو.
9

لماذا نطبع التقرير بعد الحلقة؟

لاحظ أن التقرير موجود خارج while:

print("----- تقرير المشتريات -----")
print(f"عدد المنتجات: {items_count}")
print(f"الإجمالي: {total:.2f} ريال")

السبب: نحن لا نريد طباعة التقرير بعد كل سعر. نريد طباعة التقرير بعد أن ينتهي المستخدم ويكتب done.

قاعدة مهمة: ما تريده أن يتكرر ضعه داخل while. وما تريده أن يحدث مرة واحدة بعد النهاية ضعه خارج while.
سؤال سريع 🧠 لماذا لا نضع التقرير داخل while؟ لأنه سيظهر بعد كل سعر، وهذا ليس المطلوب.
10

تحدي صغير: أضف الضريبة

بعد انتهاء الحلقة، أضف حساب الضريبة:

tax = total * 0.15
final_total = total + tax

ثم اطبع:

print(f"المجموع قبل الضريبة: {total:.2f} ريال")
print(f"الضريبة: {tax:.2f} ريال")
print(f"الإجمالي النهائي: {final_total:.2f} ريال")
هدف التحدي: ربط هذا الدرس بمشروع حاسبة الضريبة السابق. الآن لم نعد نحسب ضريبة سعر واحد، بل ضريبة مجموعة أسعار.
تحدي التفكير 🧠 إذا كان مجموع الأسعار 100، كم ستكون الضريبة؟ 15. وكم الإجمالي النهائي؟ 115.

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

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

✅ فهمت أن while يمكنها تكرار عمليات متعددة.
✅ استخدمت total لجمع الأسعار.
✅ استخدمت items_count لعدّ المنتجات.
✅ فهمت أن done توقف إدخال الأسعار.
✅ عرفت لماذا نحول السعر إلى float بعد فحص done.
✅ طبعت التقرير بعد انتهاء الحلقة.
✅ اختبرت البرنامج بعدة أسعار.
✅ بدأت تبني منطق برنامج مشتريات حقيقي.
إذا فهمت هذه النقاط: فأنت الآن لا تكتب برنامجًا يسأل مرة واحدة فقط، بل برنامجًا يستطيع استقبال عدة عمليات وبناء نتيجة نهائية منها.

خلاصة الدرس

تعلمنا كيف نستخدم while لتكرار إدخال الأسعار، وكيف نستخدم total لجمع القيم و items_count لعدّ المنتجات. ثم استخدمنا done للخروج من الحلقة وطباعة تقرير نهائي.

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

جهّز المجموع والعدد
كرر السؤال داخل while
إذا كتب المستخدم done أوقف الحلقة
إذا كتب سعرًا أضفه إلى المجموع
بعد الحلقة اطبع التقرير

في الدرس القادم سنبدأ استخدام القوائم list حتى لا نحفظ المجموع فقط، بل نحفظ تفاصيل المنتجات نفسها.