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

القوائم list: احفظ أسماء المنتجات وأسعارها

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

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

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

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

product_names = []
product_prices = []

product_names.append("Keyboard")
product_prices.append(100)

ثم سنستخدم هذه الفكرة لبناء تقرير فيه اسم كل منتج وسعره.

list تحفظ أكثر من قيمة داخل متغير واحد.
[] تعني قائمة فارغة.
append تضيف عنصرًا جديدًا إلى القائمة.
خريطة درس القوائم list في Python
مفهوم القائمة list في Python
1

لماذا نحتاج القوائم؟

في الدرس السابق كان عندنا:

total = 0
items_count = 0

هذا جيد لحساب الإجمالي والعدد، لكنه لا يحفظ التفاصيل. بعد انتهاء البرنامج لا نعرف ما أسماء المنتجات التي أُدخلت.

الفكرة ببساطة: القائمة تسمح لنا بحفظ عدة قيم، مثل أسماء المنتجات أو أسعارها، بدل حفظ قيمة واحدة فقط.
تحقق قبل الانتقال ✅ هل فهمت أن total يحفظ المجموع، لكن list تحفظ التفاصيل؟
2

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

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

python_course

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

lesson_20.py

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

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

أنشئ قائمتين فارغتين

اكتب:

product_names = []
product_prices = []

معنى ذلك:

product_names قائمة مخصصة لحفظ أسماء المنتجات.
product_prices قائمة مخصصة لحفظ أسعار المنتجات.
[] تعني أن القائمة تبدأ فارغة ثم نضيف لها لاحقًا.
لماذا القائمتان فارغتان؟ لأن المستخدم لم يدخل أي منتج بعد. سنملؤهما لاحقًا داخل الحلقة.
سؤال سريع 🧠 ماذا تعني []؟ تعني قائمة فارغة جاهزة لاستقبال عناصر.
4

جرّب append بشكل بسيط

قبل بناء المشروع، جرّب:

product_names = []

product_names.append("Keyboard")
product_names.append("Mouse")

print(product_names)

النتيجة ستكون قريبة من:

['Keyboard', 'Mouse']
شرح append في قوائم Python
معنى append: أضف هذا العنصر في نهاية القائمة.
تحقق قبل الانتقال ✅ هل فهمت أن append لا تستبدل القائمة، بل تضيف عنصرًا جديدًا إليها؟
5

استقبل اسم المنتج وسعره

سنستخدم رسالتين قصيرتين حتى يبقى الكود واضحًا:

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

داخل الحلقة سنسأل عن اسم المنتج، وإذا كتب المستخدم done نوقف الإدخال:

product_name = input(name_prompt).strip()

if product_name.lower() == "done":
    break
لماذا استخدمنا lower مع product_name عند الفحص فقط؟ لأننا نريد أن نفهم Done و DONE كأمر إنهاء، لكننا لا نريد تغيير اسم المنتج الحقيقي إذا كان المستخدم كتبه بحروف معينة.
سؤال سريع 🧠 لماذا لا نحول اسم المنتج كله إلى lower دائمًا؟ حتى لا نغير شكل الاسم الذي كتبه المستخدم.
6

أضف الاسم والسعر إلى القوائم

بعد أن نحصل على اسم المنتج والسعر، نضيفهما:

price_text = input(price_prompt).strip()
price = float(price_text)

product_names.append(product_name)
product_prices.append(price)

هنا نحفظ الاسم في قائمة الأسماء، والسعر في قائمة الأسعار.

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

اكتب جزء إدخال المنتجات

اكتب هذا الجزء في ملف lesson_20.py:

اكتب أولًا القوائم والمتغيرات الأساسية:

product_names = []
product_prices = []
total = 0

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

ثم اكتب بداية الحلقة وفحص كلمة done:

while True:
    product_name = input(name_prompt).strip()

    if product_name.lower() == "done":
        break

ثم أضف السعر والمنتج إلى القوائم:

    price_text = input(price_prompt).strip()
    price = float(price_text)

    product_names.append(product_name)
    product_prices.append(price)
    total = total + price

الآن البرنامج يستقبل أكثر من منتج ويحفظ تفاصيله.

تحقق قبل الانتقال ✅ هل فهمت أن الحلقة تضيف منتجًا جديدًا في كل مرة؟
8

كيف نقرأ العناصر من القائمة؟

القائمة تبدأ العد من صفر:

product_names[0]
product_names[1]
product_names[2]
شرح الفهرس index في قوائم Python
مهم للمبتدئ: أول عنصر في القائمة رقمه 0، وليس 1. هذا طبيعي في Python وكثير من لغات البرمجة.
سؤال سريع 🧠 إذا أردت أول منتج، هل أكتب [1] أم [0]؟ الإجابة: [0].
9

اطبع تقرير المنتجات

بعد انتهاء الحلقة، نستخدم index للمرور على القوائم:

print("----- تقرير المنتجات -----")

index = 0

while index < len(product_names):
    name = product_names[index]
    price = product_prices[index]

    print(f"{index + 1}. {name}: {price:.2f} ريال")

    index = index + 1

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

هنا استخدمنا len لمعرفة عدد العناصر داخل القائمة.

ما معنى len؟ تعطيك عدد العناصر داخل القائمة. إذا كانت القائمة فيها 3 منتجات، فإن len تعطي 3.
تحقق قبل الانتقال ✅ هل فهمت أن index يتحرك من منتج إلى المنتج الذي بعده؟
10

رتّب الكود النهائي على أجزاء

بدل كتابة الكود كاملًا دفعة واحدة، اجمعه في ملف lesson_20.py على أربعة أجزاء مرتبة.

الجزء الأول: تجهيز القوائم والمتغيرات الأساسية:

product_names = []
product_prices = []
total = 0

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

الجزء الثاني: استقبال المنتجات وإضافتها إلى القوائم:

while True:
    product_name = input(name_prompt).strip()

    if product_name.lower() == "done":
        break

    price_text = input(price_prompt).strip()
    price = float(price_text)

    product_names.append(product_name)
    product_prices.append(price)
    total = total + price

الجزء الثالث: طباعة التقرير بعد انتهاء الإدخال:

print("----- تقرير المنتجات -----")

index = 0

while index < len(product_names):
    name = product_names[index]
    price = product_prices[index]

    print(f"{index + 1}. {name}: {price:.2f} ريال")

    index = index + 1

الجزء الرابع والأخير: طباعة عدد المنتجات والإجمالي:

print(f"عدد المنتجات: {len(product_names)}")
print(f"الإجمالي: {total:.2f} ريال")
تقرير منتجات باستخدام القوائم في Python

احفظ الملف:

Ctrl + S

ثم شغله:

python lesson_20.py

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

py lesson_20.py
مهم: الأجزاء الأربعة السابقة تُكتب في نفس الملف بالترتيب، وليست ملفات منفصلة.
تحقق قبل الانتقال ✅ هل اشتغل البرنامج وبدأ يطلب اسم المنتج؟
11

اختبر البرنامج

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

اسم المنتج أو done: Keyboard
سعر المنتج: 100
اسم المنتج أو done: Mouse
سعر المنتج: 50
اسم المنتج أو done: Screen
سعر المنتج: 300
اسم المنتج أو done: done

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

----- تقرير المنتجات -----
1. Keyboard: 100.00 ريال
2. Mouse: 50.00 ريال
3. Screen: 300.00 ريال
عدد المنتجات: 3
الإجمالي: 450.00 ريال
ماذا تعلمت؟ البرنامج لم يعد يحفظ الإجمالي فقط. أصبح يحفظ تفاصيل المنتجات ويعرضها في تقرير.
توقف لحظة ✅ هل اختبرت أكثر من منتج ثم كتبت done؟
12

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

بعد طباعة الإجمالي، أضف:

tax = total * 0.15
final_total = total + tax

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

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

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

✅ فهمت أن list تحفظ أكثر من قيمة.
✅ عرفت أن [] تعني قائمة فارغة.
✅ استخدمت append لإضافة عنصر جديد.
✅ حفظت أسماء المنتجات في قائمة.
✅ حفظت أسعار المنتجات في قائمة.
✅ فهمت أن أول عنصر رقمه 0.
✅ استخدمت len لمعرفة عدد المنتجات.
✅ طبعت تقريرًا فيه أسماء وأسعار.
إذا فهمت هذه النقاط: فأنت الآن بدأت تكتب برنامجًا يحتفظ بالبيانات، وليس فقط يحسب رقمًا وينساه.

خلاصة الدرس

تعلمنا أن القائمة list تحفظ أكثر من قيمة داخل متغير واحد. استخدمنا قائمتين: واحدة لأسماء المنتجات، وواحدة للأسعار. ثم استخدمنا append لإضافة عناصر جديدة، و index لقراءة العناصر، و len لمعرفة عددها.

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

القائمة تحفظ عدة عناصر
append تضيف عنصرًا
index يقرأ عنصرًا
len يعطي عدد العناصر

في الدرس القادم سنحسن هذا المشروع ونتعلم كيف نستخدم for لجعل المرور على القوائم أسهل وأنظف.