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

الدوال functions: اجعل البرنامج مقسمًا إلى مهام واضحة

في الدرس السابق نظمنا بيانات المنتج باستخدام dict. الآن سننظم الكود نفسه باستخدام functions، وننقل طباعة التقرير إلى دالة مستقلة حتى يصبح البرنامج أسهل قراءة وتطويرًا.

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

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

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

def print_report(products, total):
    print("----- تقرير المنتجات -----")

    for product in products:
        name = product["name"]
        price = product["price"]
        print(f"{name}: {price:.2f} ريال")

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

ثم تستدعي الدالة بهذا السطر:

print_report(products, total)
def تستخدم لتعريف دالة جديدة.
parameters بيانات تدخل إلى الدالة.
call استدعاء الدالة حتى تعمل.
خريطة درس الدوال functions في Python
مفهوم function في Python
1

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

عندما يكبر البرنامج، يصبح من الصعب قراءة كل شيء في مكان واحد. الدوال تساعدنا على تقسيم البرنامج إلى مهام واضحة.

مثال:

إدخال المنتجات
حساب الإجمالي
طباعة التقرير

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

قبل وبعد استخدام الدوال في Python
الفكرة ببساطة: function هي مجموعة أوامر لها اسم. عندما نحتاج تنفيذ هذه الأوامر، نستدعي اسم الدالة.
تحقق قبل الانتقال ✅ هل فهمت أن function تساعدنا على تنظيم الكود وليس فقط تقليله؟
2

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

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

python_course

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

lesson_23.py

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

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

جرّب دالة بسيطة

اكتب:

def say_hello():
    print("أهلًا بك في برنامج المشتريات")

say_hello()

النتيجة:

أهلًا بك في برنامج المشتريات
ماذا حدث؟ عرفنا دالة اسمها say_hello، ثم استدعيناها بكتابة say_hello().
انتبه: لو كتبت def فقط ولم تكتب say_hello() في النهاية، فلن تظهر الرسالة؛ لأن الدالة لا تعمل إلا عند استدعائها.
سؤال سريع 🧠 هل الدالة تعمل بمجرد تعريفها؟ لا، تعمل عند استدعائها.
4

افهم شكل الدالة

الشكل العام للدالة:

def function_name():
    الأوامر التي تنتمي للدالة

لاحظ أربعة أشياء:

def معناها: عرّف دالة.
function_name اسم الدالة ويجب أن يوضح مهمتها.
() قوسان خاصان باستدعاء الدالة أو تمرير بيانات لها.
ولا تنسَ النقطتين: السطر الذي يبدأ بـ def ينتهي بعلامة : وبعدها تأتي الأوامر بمسافة بادئة.
تحقق قبل الانتقال ✅ هل فهمت أن الأوامر التي داخل الدالة يجب أن تكون بمسافة بادئة؟
5

ما معنى parameters؟

أحيانًا الدالة تحتاج بيانات حتى تعمل. دالة التقرير تحتاج:

products
total

لذلك نكتب:

def print_report(products, total):
شرح parameters في الدوال Python
المعنى ببساطة: products و total هنا أسماء بيانات تدخل إلى الدالة حتى تستخدمها في طباعة التقرير.
سؤال سريع 🧠 لماذا تحتاج دالة التقرير إلى products؟ لأنها ستطبع المنتجات الموجودة داخلها.
6

اكتب دالة طباعة التقرير

الآن اكتب دالة التقرير:

def print_report(products, total):
    print("----- تقرير المنتجات -----")

    for product in products:
        name = product["name"]
        price = product["price"]

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

    print(f"عدد المنتجات: {len(products)}")
    print(f"الإجمالي: {total:.2f} ريال")
خريطة كود دالة طباعة التقرير
ماذا فعلنا؟ أخذنا كود طباعة التقرير ووضعناه داخل دالة اسمها print_report.
تحقق قبل الانتقال ✅ هل فهمت أن print_report لا تدخل المنتجات، بل تطبع تقرير المنتجات الموجودة؟
7

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

الجزء الأول: ضع دالة التقرير في أعلى الملف:

def print_report(products, total):
    print("----- تقرير المنتجات -----")

    for product in products:
        name = product["name"]
        price = product["price"]

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

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

الجزء الثاني: جهز قائمة المنتجات والإجمالي:

products = []
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 = {
        "name": product_name,
        "price": price
    }

    products.append(product)
    total = total + price

الجزء الرابع: استدعِ دالة التقرير:

print_report(products, total)
مهم: الأجزاء الأربعة السابقة تُكتب في نفس ملف lesson_23.py بالترتيب.
تحقق قبل الانتقال ✅ هل فهمت أن تعريف الدالة يكون أولًا، واستدعاء الدالة يكون بعد إدخال المنتجات؟
8

شغّل البرنامج

احفظ الملف:

Ctrl + S

ثم شغله:

python lesson_23.py

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

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

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

جرّب هذه الإدخالات:

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

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

----- تقرير المنتجات -----
Keyboard: 100.00 ريال
Mouse: 50.00 ريال
عدد المنتجات: 2
الإجمالي: 150.00 ريال
ماذا تعلمت؟ النتيجة مثل الدرس السابق تقريبًا، لكن كود التقرير صار داخل دالة مستقلة يمكن تطويرها بسهولة.
توقف لحظة ✅ هل لاحظت أن آخر سطر فقط هو الذي يشغّل التقرير: print_report(products, total)؟
10

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

أضف دالة في أعلى الملف:

def print_welcome():
    print("أهلًا بك في برنامج المشتريات")
    print("أدخل المنتجات، واكتب done عند الانتهاء")

ثم استدعها قبل بداية إدخال المنتجات:

print_welcome()
هدف التحدي: تتعود أن كل جزء واضح في البرنامج يمكن وضعه داخل دالة باسم يشرح مهمته.
تحدي التفكير 🧠 هل print_welcome تحتاج products أو total؟ لا، لأنها تطبع رسالة فقط ولا تحتاج بيانات خارجية.

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

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

✅ فهمت أن function تقسم البرنامج إلى مهام.
✅ عرفت أن def تستخدم لتعريف دالة.
✅ فهمت أن الدالة لا تعمل إلا عند استدعائها.
✅ كتبت دالة print_report.
✅ مررت products و total إلى الدالة.
✅ فهمت أن parameters بيانات تدخل إلى الدالة.
✅ استدعيت print_report بعد إدخال المنتجات.
✅ أصبحت خطوة أقرب إلى برنامج منظم قابل للتطوير.
إذا فهمت هذه النقاط: فأنت بدأت تكتب كودًا منظمًا، وليس مجرد أوامر متتابعة. هذا فرق مهم في أي برنامج حقيقي.

خلاصة الدرس

تعلمنا أن functions تساعدنا على تقسيم البرنامج إلى مهام واضحة. نقلنا طباعة التقرير إلى دالة اسمها print_report، ومررنا لها products و total حتى تستخدمهما في طباعة التقرير.

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

def function_name(parameters):
    أوامر الدالة

function_name(values)

في الدرس القادم سنتعلم return، وهي خطوة مهمة تجعل الدالة لا تطبع فقط، بل تعيد نتيجة يمكن استخدامها في مكان آخر من البرنامج.