بناء الوظائف
قم بإنشاء الميزات الأساسية لمشروع "متتبع الميزانية" في هذا الدرس.
في الدرس السابق، قمتَ بما يلي:
تحدثت مع عميل افتراضي وجمعت احتياجاته.
تم تحويل الملاحظات إلى متطلبات وظيفية.
تم إنشاء هيكل نظيف مكون من ثمانية أجزاء وظيفية.
والآن سنبدأ العمل عليه. سنبدأ بوظيفتين أساسيتين، ثم نستخدم الذكاء الاصطناعي لتطوير باقي الوظائف. ستحصل أيضًا على اختبارات سريعة وحل مرجعي كامل.
سنحتفظ بنموذج بيانات صغير في الذاكرة:
# globals (top of your file)income = 0.0# A list of expense dictionaries, e.g. [{"category": str, "amount": float}, ...]expenses = [] # each entry: {"category": str, "amount": float}
الاصطلاحات التي سنستخدمها:
المبالغ الموجبة فقط.
وحدات مدمجة فقط، Python، بدون مكتبات خارجية / إدخال/إخراج الملفات / فئات.
ابدأ ببناء الأساسيات
سنقوم بالتنفيذadd_income وadd_expense أولاً. هذه هي العناصر الأساسية للتطبيق؛ كل شيء آخر متصل بها.
add_income(amount)
قبل أن نبدأ بكتابة أول دالة لنا، دعونا نلقي نظرة على كيفية تنظيم برنامج Python عادةً:
المتغيرات: في بداية الملف، نُعرّف المتغيرات التي تحتوي على بيانات تطبيقنا. في حالتنا:
income = 0.0يتتبع الدخل الشهري.expenses = []سيتم تخزين جميع النفقات كقائمة متنامية.
الوظائف: تقوم الوظائف بتجميع المنطق في أجزاء صغيرة قابلة لإعادة الاستخدام.
على سبيل المثال،
add_income(amount)هي دالة تقوم بتحديث المتغير العامincomeسنكتب لاحقًا أيضًاadd_expense(...)،print_report(...)وغير ذلك.
ال
mainالوظيفة: من الممارسات الشائعة أن يكون لديكmain()الدالة التي تُشكّل نقطة البداية للبرنامج. داخلها، نستدعي الدوال الأصغر لتنفيذ المهام.حارس الإعدام: في الأسفل، سنرى:
if __name__ == "__main__": main()هذا يُخبر Python: إذا تم تشغيل هذا الملف مباشرةً، فابدأ باستدعاءmain()إنها نقطة انطلاق البرنامج.
ملاحظة: مع وجود هذا الهيكل، يكون لكل جزء من المنطق مكانه: البيانات في الأعلى، والوظائف المساعدة في المنتصف، وتنفيذ البرنامج في الأسفل.
لنضف هذه الخاصية إلى دالة الدخل لدينا.
income = 0.0
# A list of expense dictionaries, e.g. [{"category": str, "amount": float}, ...]
expenses = []
def add_income(amount):
"""Set or update the monthly income."""
global income
income = float(amount)
print("Income set to ${0:.2f}".format(income))
def main():
amount = input("Enter your monthly income: $")
add_income(amount)
if __name__ == "__main__":
main()add_expense(category, amount)
والآن، علينا بناء دالة المصروفات، ولكننا نحتاج لذلك إلى فئات للمصروفات كما هو موضح في معلمات الدالة، لذا دعونا نحددها أولاً:
allowed_categories = {"Food", "Rent", "Transport", "Entertainment","Utilities", "Health", "Education", "Other"}
والآن، دعونا نستخدم هذه في دالتنا.
income = 0.0
#A list of expense dictionaries, e.g. [{"category": str, "amount": float}, ...]
expenses = []
allowed_categories = {
"Food", "Rent", "Transport", "Entertainment",
"Utilities", "Health", "Education", "Other"
}
def add_income(amount):
"""Set or update the monthly income."""
global income
income = float(amount)
print("Income set to ${0:.2f}".format(income))
def add_expense(category, amount):
"""Record an expense item."""
if category not in allowed_categories:
print("Invalid category. Please choose from: " + ", ".join(allowed_categories))
return
expenses.append({"category": category, "amount": float(amount)})
print("Expense added: {0} - ${1:.2f}".format(category, float(amount))) # Convert amount to float here
def run_cli():
"""Command-line interface."""
while True:
print("Welcome to Budget Tracker — Capstone Project")
print("1. Add income")
print("2. Add expense")
print("3. Exit")
choice = input("Choose an option (1-3): ")
if choice == "1":
amount = input("Enter your monthly income: $")
add_income(amount)
elif choice == "2":
print("\nNow, let's add an expense.")
category = input("Enter the expense category (" + ", ".join(allowed_categories) + "): ")
amount = input("Enter the expense amount: $")
add_expense(category, amount)
elif choice == "3":
print("Exiting Budget Tracker.")
break
else:
print("Invalid choice. Please select a valid option.")
if __name__ == "__main__":
run_cli()في الكود أعلاه:
add_expense(category, amount):يؤكد صحة
categoryضد الخيارات المسموح بها.في حال صحة ذلك، يتم إضافة المصروف (الفئة + المبلغ) إلى
expensesثم يعرض القائمة ويطبع تأكيدًا.
run_cli():يعرض قائمة بخيارات لـ:
إضافة دخل (
1)إضافة المصاريف (
2)مخرج (
3)
بناءً على إدخال المستخدم، فإنه يستدعي إما
add_income()أوadd_expense()وتستمر الحلقة حتى يخرج المستخدم.
أمور يجب مراعاتها:
main()يتم تشغيله مرة واحدة فقط ثم يتوقف، وهو أمر جيد للاختبار.run_cli()يستمر عرض القائمة بشكل متكرر حتى يخرج المستخدم. وهذا ما يجعله تطبيقًا كاملاً.لقد استخدمنا
run_cliبدلاً منmainلأننا نريد برنامجًا تفاعليًا، وليس اختبارًا لمرة واحدة. معrun_cli، يمكن للمستخدم الاستمرار في إضافة الدخل أو النفقات دون إعادة تشغيل البرنامج.نحن لا نضيف عمداً
try/exceptمع ذلك. إذا تم إدخال مبلغ غير رقمي،float(...)سوف يفشل، لذا يرجى وضع ذلك في الاعتبار.
قم بإنشاء الوظائف المتبقية
الآن، وبعد أن وضعنا الأساس، حان دورك بناء ما تبقى. يمكنك استخدام برنامج AI Copilot لإنشاء هيكل أساسي لبقية عملية التنفيذ.delete_expense ،total_spent ،compute_category_totals ،print_report ،show_menu ،reset_data ،run_cli .
فيما يلي وكيل ذكاء اصطناعي. يمكنك استخدامه لإنشاء الوظائف المتبقية.
أعطه توجيهًا، وأخبره بما قمت ببنائه وما تحتاج إلى إراحته، واطلب منه توليدها.
يمكنك بناء على هيكل المشروع من الدرس السابق. بدلاً من الانتقال مباشرةً إلى الحل الكامل، حاول تنفيذ وظيفة واحدة في كل مرة. في كل مرة تنتهي فيها من وظيفة، الصقها في أداة الكود أدناه لمعرفة كيفية عملها. سيمنحك هذا النهج التدريجي فهمًا أفضل لكيفية ترابط المشروع بأكمله.
إذا كنت غير متأكد، فانقر فوق زر"إظهار الهيكل الأساسي للمشروع".
اختبر الكود الخاص بك
الخطوة التالية هي اختبار الكود الذي قمت بإنشائه. أضفه إلى الأداة أدناه وشاهد كيف يعمل.
income = 0.0
# A list of expense dictionaries, e.g. [{"category": str, "amount": float}, ...]
expenses = []
allowed_categories = {
"Food", "Rent", "Transport", "Entertainment",
"Utilities", "Health", "Education", "Other"
}
def add_income(amount):
"""Set or update the monthly income."""
global income
income = float(amount)
print("Income set to ${0:.2f}".format(income))
def add_expense(category, amount):
"""Record an expense item."""
if category not in allowed_categories:
print("Invalid category. Please choose from: " + ", ".join(allowed_categories))
return
expenses.append({"category": category, "amount": float(amount)})
print("Expense added: {0} - ${1:.2f}".format(category, float(amount))) # Convert amount to float here
# Add your code
def run_cli():
"""Command-line interface."""
while True:
print("Welcome to Budget Tracker — Capstone Project")
print("1. Add income")
print("2. Add expense")
print("3. Exit")
choice = input("Choose an option (1-3): ")
if choice == "1":
amount = input("Enter your monthly income: $")
add_income(amount)
elif choice == "2":
print("\nNow, let's add an expense.")
category = input("Enter the expense category (" + ", ".join(allowed_categories) + "): ")
amount = input("Enter the expense amount: $")
add_expense(category, amount)
elif choice == "3":
print("Exiting Budget Tracker.")
break
else:
print("Invalid choice. Please select a valid option.")
if __name__ == "__main__":
run_cli()إذا واجهتك مشكلة، فانقر على زر"إظهار الحل".
لدينا الآن نسخة عاملة قوية من متتبع الميزانية، ولكن هناك المزيد من التحسينات التي يجب إجراؤها، مثل تغطية الحالات الشاذة ومعالجة الاستثناءات، والتي سنتناولها في الدرس التالي.