Menu
Coddy logo textTech

Özet - Banka Hesabı Yöneticisi

Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 64.

challenge icon

Görev

Orta

Değişkenler, gizli öznitelikler, özellikler, getter'lar, setter'lar ve metotlar dahil olmak üzere nesne yönelimli programlama kavramlarını gösteren eksiksiz bir BankAccount class'ı oluşturun. 

1. Şunlara sahip bir BankAccount class'ı oluşturun:

  • interest_rate (%2) değerine ayarlanmış bir class değişkeni: 0.02
  • __owner_name ve __balance için private örnek öznitelikleri
  • Bu öznitelikleri başlatan bir constructor

2. Property getter'larını ve setter'larını uygulayın: 

  • Hesap sahibinin adını döndüren salt okunur bir owner_name property'si
  • Şunlara sahip bir balance property'si:
    • Güncel bakiyeyi döndüren bir getter
    • Para yatırma işlemlerini doğrulayan (negatif tutarları reddeden) bir setter
    • Doğrulama başarısız olursa şunu yazdırın: "Balance cannot be negative"

3. Metotları uygulayın:

  • Şunları yapan deposit(amount):
    • Tutar pozitifse bakiyeye ekler
    • Tutar pozitif değilse "Deposit amount must be positive" yazdırır ve False döndürür
    • Başarılı olduğunda True döndürür
  • Şunları yapan withdraw(amount):
    • Tutar pozitifse ve yeterli bakiye varsa bakiyeden çıkarır
    • Tutar pozitif değilse "Withdrawal amount must be positive" yazdırır ve False döndürür
    • Tutar bakiyeyi aşarsa "Insufficient funds" yazdırır ve False döndürür
    • Başarılı olduğunda True döndürür
  • Şunları yapan apply_interest():
    • Class faiz oranına göre bakiyeye faiz ekler
    • Faiz tutarını döndürür
  • Hesap ayrıntılarını aşağıdaki biçimde yazdıran display_info():

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

Çıktı Biçimi Gereksinimleri

  • Tüm doğrulama hata mesajları tam olarak belirtildiği şekilde yazdırılmalıdır
  • display_info() metodu çıktıyı tam olarak yukarıda gösterildiği gibi biçimlendirmelidir
  • Faiz oranı yüzde olarak görüntülenmelidir (100 ile çarpılmalıdır)

Kendin dene

from bank_account import BankAccount

# Test senaryosu işleyicisi
test_case = input()

if test_case == "account_creation":
    # Hesap oluşturmayı test et
    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":
    # Para yatırma işlevini test et
    account = BankAccount("Bob", 500)
    print(f"Initial balance: ${account.balance}")
    
    # Geçerli para yatırma
    result = account.deposit(300)
    print(f"Deposit result: {result}")
    print(f"New balance: ${account.balance}")
    
    # Geçersiz para yatırma
    result = account.deposit(-50)
    print(f"Negative deposit result: {result}")
    print(f"Balance after invalid deposit: ${account.balance}")

elif test_case == "withdraw_method":
    # Para çekme işlevini test et
    account = BankAccount("Charlie", 1000)
    
    # Geçerli para çekme
    result = account.withdraw(400)
    print(f"Withdrawal result: {result}")
    print(f"Balance after withdrawal: ${account.balance}")
    
    # Geçersiz para çekme (negatif)
    result = account.withdraw(-50)
    print(f"Negative withdrawal result: {result}")
    
    # Geçersiz para çekme (bakiyeyi aşan)
    result = account.withdraw(1000)
    print(f"Excessive withdrawal result: {result}")
    print(f"Final balance: ${account.balance}")

elif test_case == "property_access":
    # Özellik erişimini ve korumasını test et
    account = BankAccount("Dave", 800)
    
    print(f"Owner via property: {account.owner_name}")
    print(f"Balance via property: ${account.balance}")
    
    # Bakiyeyi ayarlamaya çalış (setter kullanmalı)
    account.balance = 1200
    print(f"Balance after valid setter: ${account.balance}")
    
    # Geçersiz bakiye dene
    account.balance = -500
    print(f"Balance after invalid setter: ${account.balance}")
    
    # Özel niteliklere doğrudan erişmeyi dene (başarısız olmalı)
    try:
        print(account.__owner_name)
    except AttributeError:
        print("Cannot access private owner_name directly")

elif test_case == "apply_interest":
    # Faiz uygulamasını test et
    account = BankAccount("Eve", 2000)
    
    # Orijinal bakiyeyi kontrol et
    print(f"Initial balance: ${account.balance}")
    
    # Faiz uygula
    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 metot formatını test et
    account = BankAccount("Frank", 1500)
    
    # Sınıf değişkenini test etmek için faiz oranını değiştir
    original_rate = BankAccount.interest_rate
    BankAccount.interest_rate = 0.03
    
    print("Display info output:")
    account.display_info()
    
    # Orijinal oranı geri yükle
    BankAccount.interest_rate = original_rate

elif test_case == "original_test_case":
    # Yarışmadaki orijinal test kodunu çalıştır
    account = BankAccount("Coddy", 1000)

    # İşlemleri gerçekleştir
    account.deposit(500)
    account.withdraw(200)
    account.apply_interest()

    # Hesap bilgilerini görüntüle
    account.display_info()

    # Setter doğrulamasını test et
    account.balance = 5000
    print(f"Balance after setter: ${account.balance}")

    # Para çekme doğrulamasını test et
    account.withdraw(10000)
    print(f"Final balance: ${account.balance}")

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi