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

return: اجعل الدالة تعيد نتيجة يمكن استخدامها

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

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

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

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

def calculate_tax(total):
    tax = total * 0.15
    return tax

ثم تستخدم النتيجة بهذا الشكل:

tax = calculate_tax(total)
return تعيد نتيجة من داخل الدالة.
print تعرض نتيجة أمام المستخدم.
استخدام النتيجة نخزن قيمة return في متغير.
خريطة درس return في Python
مفهوم return في Python
1

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

في الدرس السابق دالة التقرير كانت تطبع مباشرة. هذا مناسب للتقرير. لكن ماذا عن دالة تحسب الضريبة؟

نحن لا نريدها أن تطبع فقط. نريدها أن تعطينا قيمة الضريبة حتى نستخدمها لاحقًا في حساب الإجمالي النهائي.

الفرق بين print و return في Python
الفكرة ببساطة: استخدم print عندما تريد العرض، واستخدم return عندما تريد إعادة نتيجة قابلة للاستخدام.
تحقق قبل الانتقال ✅ هل فهمت أن return لا تعرض النتيجة، بل تعيدها للبرنامج؟
2

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

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

python_course

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

lesson_24.py

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

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

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

اكتب:

def add_numbers():
    result = 5 + 3
    return result

answer = add_numbers()

print(answer)

النتيجة:

8
ماذا حدث؟ الدالة حسبت 5 + 3، ثم أعادت النتيجة باستخدام return، وبعدها خزنا النتيجة في answer.
سؤال سريع 🧠 أين ذهبت نتيجة return؟ ذهبت إلى المتغير answer.
4

اكتب دالة حساب الضريبة

الآن نكتب دالة خاصة بحساب الضريبة:

def calculate_tax(total):
    tax = total * 0.15
    return tax

هذه الدالة تستقبل total، وتحسب 15%، ثم تعيد قيمة الضريبة.

تدفق دالة حساب الضريبة باستخدام return
لاحظ: لا يوجد print داخل الدالة. الدالة هنا وظيفتها الحساب فقط.
تحقق قبل الانتقال ✅ هل فهمت أن calculate_tax ترجع الضريبة ولا تطبعها؟
5

استخدم نتيجة الدالة

بعد تعريف الدالة، نستدعيها ونخزن النتيجة:

total = 150

tax = calculate_tax(total)

print(tax)

النتيجة:

22.5
المهم هنا: المتغير tax استقبل القيمة التي رجعتها return.
سؤال سريع 🧠 إذا لم نخزن نتيجة calculate_tax في متغير، هل نستطيع استخدامها لاحقًا بسهولة؟ لا.
6

أضف دالة الإجمالي النهائي

الآن نكتب دالة ثانية لحساب الإجمالي بعد الضريبة:

def calculate_final_total(total, tax):
    return total + tax

هذه الدالة تستقبل total و tax، وترجع الناتج النهائي.

خريطة كود return في مشروع المشتريات
تحقق قبل الانتقال ✅ هل فهمت أن دالة calculate_final_total ترجع رقمًا جديدًا؟
7

حدّث دالة التقرير

سنجعل دالة التقرير تستقبل الضريبة والإجمالي النهائي أيضًا:

def print_report(products, total, tax, final_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(f"الضريبة: {tax:.2f} ريال")
    print(f"الإجمالي النهائي: {final_total:.2f} ريال")
لماذا لم نحسب الضريبة داخل print_report؟ لأننا نريد أن تبقى دالة التقرير مسؤولة عن الطباعة فقط، ودوال الحساب مسؤولة عن الحساب.
تحقق قبل الانتقال ✅ هل فهمت أن كل دالة لها مهمة واحدة واضحة؟
8

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

الجزء الأول: دوال الحساب:

def calculate_tax(total):
    tax = total * 0.15
    return tax

def calculate_final_total(total, tax):
    return total + tax

الجزء الثاني: دالة التقرير:

def print_report(products, total, tax, final_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(f"الضريبة: {tax:.2f} ريال")
    print(f"الإجمالي النهائي: {final_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

الجزء الخامس: حساب النتائج واستدعاء التقرير:

tax = calculate_tax(total)
final_total = calculate_final_total(total, tax)

print_report(products, total, tax, final_total)
مهم: الأجزاء الخمسة السابقة تُكتب في نفس ملف lesson_24.py بالترتيب.
تحقق قبل الانتقال ✅ هل فهمت أن دوال الحساب ترجع نتائج، ثم نرسل هذه النتائج إلى دالة التقرير؟
9

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

احفظ الملف:

Ctrl + S

ثم شغله:

python lesson_24.py

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

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

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

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

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

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

----- تقرير المنتجات -----
Keyboard: 100.00 ريال
Mouse: 50.00 ريال
عدد المنتجات: 2
الإجمالي قبل الضريبة: 150.00 ريال
الضريبة: 22.50 ريال
الإجمالي النهائي: 172.50 ريال
ماذا تعلمت؟ دوال الحساب أعادت نتائج، ثم استخدمنا هذه النتائج داخل التقرير النهائي.
توقف لحظة ✅ هل لاحظت أن الضريبة لم تُطبع داخل calculate_tax، بل رجعت منها ثم طُبعت في التقرير؟
11

تحدي صغير: غيّر نسبة الضريبة

عدّل دالة calculate_tax لتستقبل نسبة الضريبة:

def calculate_tax(total, tax_rate):
    return total * tax_rate

ثم استخدمها:

tax = calculate_tax(total, 0.15)
هدف التحدي: تجعل الدالة أكثر مرونة، بحيث لا تكون نسبة الضريبة ثابتة داخلها.
تحدي التفكير 🧠 لماذا تمرير tax_rate أفضل؟ لأن الدالة تصبح قابلة للاستخدام مع أي نسبة ضريبة.

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

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

✅ فهمت أن return تعيد نتيجة من الدالة.
✅ عرفت الفرق بين print و return.
✅ كتبت دالة calculate_tax.
✅ خزنت نتيجة return في متغير tax.
✅ كتبت دالة calculate_final_total.
✅ مررت النتائج إلى print_report.
✅ فهمت أن دوال الحساب لا تطبع، بل تعيد نتائج.
✅ أصبحت خطوة أقرب إلى برنامج احترافي منظم.
إذا فهمت هذه النقاط: فأنت بدأت تفصل بين الحساب والعرض، وهذا من أهم مبادئ بناء البرامج القابلة للتطوير.

خلاصة الدرس

تعلمنا أن return تجعل الدالة تعيد نتيجة يمكن تخزينها واستخدامها. استخدمناها في calculate_tax لحساب الضريبة، وفي calculate_final_total لحساب الإجمالي النهائي.

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

def function_name():
    return result

value = function_name()

في الدرس القادم سنتعلم التعامل مع الأخطاء try و except حتى لا ينهار البرنامج عندما يكتب المستخدم سعرًا غير صحيح.