قائمة أوامر البرنامج: اجعل المستخدم يختار ماذا يريد
في الدرس السابق رتبنا مشروع المشتريات في ملف منظم. الآن سنضيف قائمة أوامر تجعل المستخدم يختار بين إضافة منتج، عرض التقرير، أو الخروج من البرنامج.
ما النتيجة التي يجب أن تخرج بها؟
في نهاية الدرس سيعرض البرنامج قائمة مثل:
----- قائمة البرنامج ----- 1. إضافة منتج 2. عرض التقرير 3. خروج
ثم يقرأ اختيار المستخدم:
choice = input("اختر رقم الأمر: ").strip()
لماذا نحتاج قائمة أوامر؟
في النسخ السابقة كان البرنامج يتبع مسارًا واحدًا: أدخل منتجات، ثم اكتب done، ثم يظهر التقرير.
لكن في البرامج الحقيقية، المستخدم غالبًا يحتاج أن يختار:
أضيف منتجًا الآن؟ أعرض التقرير؟ أخرج من البرنامج؟
أنشئ ملف الدرس السابع والعشرين
افتح مجلد الدورة داخل VS Code:
python_course
ثم أنشئ ملفًا جديدًا باسم:
lesson_27.py
افتح الملف داخل Editor.
اكتب دالة عرض القائمة
سنجعل عرض القائمة داخل دالة مستقلة:
def print_menu():
print()
print("----- قائمة البرنامج -----")
print("1. إضافة منتج")
print("2. عرض التقرير")
print("3. خروج")
هذه الدالة لا تحسب ولا تحفظ بيانات. وظيفتها فقط عرض القائمة.
افهم اختيارات المستخدم
بعد عرض القائمة، نقرأ اختيار المستخدم:
menu_prompt = "اختر رقم الأمر: " choice = input(menu_prompt).strip()
ثم نفحص الاختيار:
if choice == "1":
print("إضافة منتج")
elif choice == "2":
print("عرض التقرير")
elif choice == "3":
print("خروج")
else:
print("اختيار غير صحيح")
اكتب دالة إضافة المنتج
حتى لا تصبح main طويلة، سنضع إدخال المنتج داخل دالة:
أولًا: عرّف الدالة وجهز رسائل الإدخال:
def add_product(products):
name_prompt = "اسم المنتج: "
price_prompt = "سعر المنتج: "
ثانيًا: اقرأ اسم المنتج والسعر كنص:
product_name = input(name_prompt).strip()
price_text = input(price_prompt).strip()
ثالثًا: حاول تحويل السعر إلى رقم:
try:
price = float(price_text)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
return 0
رابعًا: امنع السعر السالب:
if price < 0:
print("السعر لا يمكن أن يكون سالبًا")
return 0
خامسًا: أنشئ المنتج وأضفه إلى القائمة ثم أرجع السعر:
product = create_product(
product_name,
price
)
products.append(product)
print("تمت إضافة المنتج بنجاح")
return price
لاحظ أن الدالة ترجع price إذا تمت الإضافة، وترجع 0 إذا فشل الإدخال.
حدّث دالة التقرير إذا لم توجد منتجات
إذا اختار المستخدم عرض التقرير قبل إضافة أي منتج، نعرض رسالة واضحة:
def print_report(products, total, tax, final_total):
if len(products) == 0:
print("لا توجد منتجات حتى الآن")
return
ثم نكمل بقية التقرير بعد هذا الفحص.
رتّب الكود النهائي على أجزاء
الجزء الأول: الإعدادات ودوال الحساب:
TAX_RATE = 0.15
def calculate_tax(total):
return total * TAX_RATE
def calculate_final_total(total, tax):
return total + tax
الجزء الثاني: دالة إنشاء المنتج:
def create_product(product_name, price):
product = {
"name": product_name,
"price": price
}
return product
الجزء الثالث: دالة عرض القائمة:
def print_menu():
print()
print("----- قائمة البرنامج -----")
print("1. إضافة منتج")
print("2. عرض التقرير")
print("3. خروج")
الجزء الرابع: دالة إضافة منتج:
أولًا: عرّف الدالة وجهز رسائل الإدخال:
def add_product(products):
name_prompt = "اسم المنتج: "
price_prompt = "سعر المنتج: "
ثانيًا: اقرأ اسم المنتج والسعر كنص:
product_name = input(name_prompt).strip()
price_text = input(price_prompt).strip()
ثالثًا: حاول تحويل السعر إلى رقم:
try:
price = float(price_text)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
return 0
رابعًا: امنع السعر السالب:
if price < 0:
print("السعر لا يمكن أن يكون سالبًا")
return 0
خامسًا: أنشئ المنتج وأضفه إلى القائمة ثم أرجع السعر:
product = create_product(
product_name,
price
)
products.append(product)
print("تمت إضافة المنتج بنجاح")
return price
الجزء الخامس: دالة التقرير:
def print_report(products, total, tax, final_total):
if len(products) == 0:
print("لا توجد منتجات حتى الآن")
return
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} ريال")
الجزء السادس: بداية main:
def main():
products = []
total = 0
menu_prompt = "اختر رقم الأمر: "
الجزء السابع: حلقة القائمة داخل main:
while True:
print_menu()
choice = input(menu_prompt).strip()
if choice == "1":
added_price = add_product(products)
total = total + added_price
الجزء الثامن: اختيار عرض التقرير:
elif choice == "2":
tax = calculate_tax(total)
final_total = calculate_final_total(
total,
tax
)
print_report(
products,
total,
tax,
final_total
)
الجزء التاسع: الخروج أو الاختيار الخاطئ:
elif choice == "3":
print("تم إنهاء البرنامج")
break
else:
print("اختيار غير صحيح، حاول مرة أخرى")
الجزء العاشر والأخير: تشغيل البرنامج:
main()
شغّل البرنامج
احفظ الملف:
Ctrl + S
ثم شغله:
python lesson_27.py
وإذا لم يعمل أمر python:
py lesson_27.py
اختبر البرنامج
جرّب هذا السيناريو:
أولًا: جرّب عرض التقرير قبل إضافة منتجات:
اختر رقم الأمر: 2 لا توجد منتجات حتى الآن
ثانيًا: أضف منتجًا صحيحًا:
اختر رقم الأمر: 1 اسم المنتج: Keyboard سعر المنتج: 100 تمت إضافة المنتج بنجاح
ثالثًا: جرّب إدخال سعر خاطئ:
اختر رقم الأمر: 1 اسم المنتج: Mouse سعر المنتج: abc السعر غير صحيح، اكتب رقمًا فقط
رابعًا: أضف المنتج بسعر صحيح:
اختر رقم الأمر: 1 اسم المنتج: Mouse سعر المنتج: 50 تمت إضافة المنتج بنجاح
خامسًا: اعرض التقرير ثم اخرج من البرنامج:
اختر رقم الأمر: 2 ----- تقرير المنتجات ----- Keyboard: 100.00 ريال Mouse: 50.00 ريال عدد المنتجات: 2 الإجمالي قبل الضريبة: 150.00 ريال الضريبة: 22.50 ريال الإجمالي النهائي: 172.50 ريال اختر رقم الأمر: 3 تم إنهاء البرنامج
تحدي صغير: أضف أمرًا رابعًا
أضف في القائمة:
print("4. عدد المنتجات")
ثم داخل main أضف:
elif choice == "4":
print(f"عدد المنتجات الحالي: {len(products)}")
اختبار نهاية الدرس
قبل الانتقال للدرس القادم، تأكد أنك فهمت هذه النقاط:
خلاصة الدرس
تعلمنا كيف نضيف قائمة أوامر للبرنامج. أصبح المستخدم يستطيع اختيار إضافة منتج، عرض التقرير، أو الخروج. استخدمنا while لتكرار القائمة، و if / elif لتحديد المسار المناسب.
تذكر القاعدة:
اعرض القائمة اقرأ اختيار المستخدم نفذ الأمر المناسب كرر القائمة حتى يختار الخروج
في الدرس القادم سنحسن تجربة المستخدم أكثر بإضافة حذف منتج من القائمة قبل طباعة التقرير النهائي.
💬 التعليقات
لا توجد تعليقات بعد.
🚫 يجب تسجيل الدخول لإضافة تعليق. دخول / تسجيل