Search⌘ K
AI Features

بناء الوظائف

قم بإنشاء الميزات الأساسية لمشروع "متتبع الميزانية" في هذا الدرس.

في الدرس السابق، قمتَ بما يلي:

  • تحدثت مع عميل افتراضي وجمعت احتياجاته.

  • تم تحويل الملاحظات إلى متطلبات وظيفية.

  • تم إنشاء هيكل نظيف مكون من ثمانية أجزاء وظيفية.

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

سنحتفظ بنموذج بيانات صغير في الذاكرة:

# 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()
Adding income

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()
Adding expenses

في الكود أعلاه:

  1. add_expense(category, amount) :

    1. يؤكد صحةcategory ضد الخيارات المسموح بها.

    2. في حال صحة ذلك، يتم إضافة المصروف (الفئة + المبلغ) إلىexpenses ثم يعرض القائمة ويطبع تأكيدًا.

  2. run_cli() :

    1. يعرض قائمة بخيارات لـ:

      1. إضافة دخل (1 )

      2. إضافة المصاريف (2 )

      3. مخرج (3 )

    2. بناءً على إدخال المستخدم، فإنه يستدعي إما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 .

فيما يلي وكيل ذكاء اصطناعي. يمكنك استخدامه لإنشاء الوظائف المتبقية.

أعطه توجيهًا، وأخبره بما قمت ببنائه وما تحتاج إلى إراحته، واطلب منه توليدها.

Powered by AI
10 Prompts Remaining
Prompt AI WidgetOur tool is designed to help you to understand concepts and ask any follow up questions. Ask a question to get started.
AI agent to generate rest of the functions

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

إذا كنت غير متأكد، فانقر فوق زر"إظهار الهيكل الأساسي للمشروع".

اختبر الكود الخاص بك

الخطوة التالية هي اختبار الكود الذي قمت بإنشائه. أضفه إلى الأداة أدناه وشاهد كيف يعمل.

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()
Budget tracker complete implementation

إذا واجهتك مشكلة، فانقر على زر"إظهار الحل".

لدينا الآن نسخة عاملة قوية من متتبع الميزانية، ولكن هناك المزيد من التحسينات التي يجب إجراؤها، مثل تغطية الحالات الشاذة ومعالجة الاستثناءات، والتي سنتناولها في الدرس التالي.