Menu
Coddy logo textTech

סיכום – מנהל חשבון בנק

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 16 מתוך 64.

challenge icon

אתגר

בינוני

צרו מחלקה מלאה בשם BankAccount שמדגימה מושגים בתכנות מונחה עצמים, כולל משתני מחלקה, מאפיינים פרטיים, מאפיינים, getters, setters ומתודות. 

1. צרו מחלקה בשם BankAccount עם:

  • משתנה מחלקה interest_rate שמוגדר לערך 0.02 (2%)
  • מאפייני מופע פרטיים עבור __owner_name ו-__balance
  • בנאי שמאתחל את המאפיינים האלה

2. ממשו getters ו-setters של מאפיינים: 

  • מאפיין לקריאה בלבד בשם owner_name שמחזיר את שם בעל החשבון
  • מאפיין בשם balance עם:
    • getter שמחזיר את היתרה הנוכחית
    • setter שמאמת הפקדות (ודוחה סכומים שליליים)
    • אם האימות נכשל, הדפיסו: "Balance cannot be negative"

3. ממשו מתודות:

  • deposit(amount) ש:
    • מוסיף ליתרה אם הסכום חיובי
    • מדפיס "Deposit amount must be positive" ומחזיר False אם הסכום אינו חיובי
    • מחזיר True במקרה של הצלחה
  • withdraw(amount) ש:
    • מפחית מהיתרה אם הסכום חיובי ויש מספיק כספים
    • מדפיס "Withdrawal amount must be positive" ומחזיר False אם הסכום אינו חיובי
    • מדפיס "Insufficient funds" ומחזיר False אם הסכום גבוה מהיתרה
    • מחזיר True במקרה של הצלחה
  • apply_interest() ש:
    • מוסיף ריבית ליתרה בהתאם לשיעור הריבית של המחלקה
    • מחזיר את סכום הריבית
  • display_info() שמדפיסה את פרטי החשבון בפורמט הזה:

    Account Owner: [owner_name]
    Balance: $[balance]
    Interest Rate: [interest_rate]%

דרישות פורמט הפלט

  • יש להדפיס את כל הודעות השגיאה של האימות בדיוק כפי שצוינו
  • על המתודה display_info() לעצב את הפלט בדיוק כפי שמוצג למעלה
  • יש להציג את שיעור הריבית כאחוז (להכפיל ב-100)

נסו בעצמכם

from bank_account import BankAccount

# מטפל במקרי בדיקה
test_case = input()

if test_case == "account_creation":
    # בדיקת יצירת חשבון
    account = BankAccount("Alice", 1000)
    print(f"Owner: {account.owner_name}")
    print(f"Initial balance: ${account.balance}")
    print(f"Interest rate: {BankAccount.interest_rate * 100}%")

elif test_case == "deposit_method":
    # בדיקת פעולת ההפקדה
    account = BankAccount("Bob", 500)
    print(f"Initial balance: ${account.balance}")
    
    # הפקדה תקינה
    result = account.deposit(300)
    print(f"Deposit result: {result}")
    print(f"New balance: ${account.balance}")
    
    # הפקדה לא תקינה
    result = account.deposit(-50)
    print(f"Negative deposit result: {result}")
    print(f"Balance after invalid deposit: ${account.balance}")

elif test_case == "withdraw_method":
    # בדיקת פעולת המשיכה
    account = BankAccount("Charlie", 1000)
    
    # משיכה תקינה
    result = account.withdraw(400)
    print(f"Withdrawal result: {result}")
    print(f"Balance after withdrawal: ${account.balance}")
    
    # משיכה לא תקינה (סכום שלילי)
    result = account.withdraw(-50)
    print(f"Negative withdrawal result: {result}")
    
    # משיכה לא תקינה (חורגת מהיתרה)
    result = account.withdraw(1000)
    print(f"Excessive withdrawal result: {result}")
    print(f"Final balance: ${account.balance}")

elif test_case == "property_access":
    # בדיקת גישה למאפיינים והגנה עליהם
    account = BankAccount("Dave", 800)
    
    print(f"Owner via property: {account.owner_name}")
    print(f"Balance via property: ${account.balance}")
    
    # ניסיון להגדיר את היתרה (יש להשתמש בפונקציית ההגדרה)
    account.balance = 1200
    print(f"Balance after valid setter: ${account.balance}")
    
    # ניסיון להגדיר יתרה לא תקינה
    account.balance = -500
    print(f"Balance after invalid setter: ${account.balance}")
    
    # נסה לגשת ישירות למאפיינים פרטיים (אמור להיכשל)
    try:
        print(account.__owner_name)
    except AttributeError:
        print("Cannot access private owner_name directly")

elif test_case == "apply_interest":
    # בדוק את החלת הריבית
    account = BankAccount("Eve", 2000)
    
    # בדוק את היתרה המקורית
    print(f"Initial balance: ${account.balance}")
    
    # החל ריבית
    interest_earned = account.apply_interest()
    expected_interest = 2000 * 0.02
    
    print(f"Interest earned: ${interest_earned}")
    print(f"New balance after interest: ${account.balance}")
    print(f"Interest calculation correct: {interest_earned == expected_interest}")

elif test_case == "display_info":
    # בדוק את הפורמט של המתודה display_info
    account = BankAccount("Frank", 1500)
    
    # שנה את שיעור הריבית כדי לבדוק משתנה מחלקה
    original_rate = BankAccount.interest_rate
    BankAccount.interest_rate = 0.03
    
    print("Display info output:")
    account.display_info()
    
    # שחזר את שיעור הריבית המקורי
    BankAccount.interest_rate = original_rate

elif test_case == "original_test_case":
    # הרץ את קוד הבדיקה המקורי מהאתגר
    account = BankAccount("Coddy", 1000)

    # בצע פעולות
    account.deposit(500)
    account.withdraw(200)
    account.apply_interest()

    # הצג את פרטי החשבון
    account.display_info()

    # בדוק את האימות ב-setter
    account.balance = 5000
    print(f"Balance after setter: ${account.balance}")

    # בדוק את האימות של משיכה
    account.withdraw(10000)
    print(f"Final balance: ${account.balance}")

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Python אונליין