Question
In Python, please! The str method of the Bank class returns a string containing the accounts in random order. Design and implement a change that
In Python, please! The str method of the Bank class returns a string containing the accounts in random order. Design and implement a change that causes the accounts to be placed in the string by order of name. (Hint: You will also have to define some methods in the SavingsAccount class.) Bank.py Code:
""" File: bank.py This module defines the Bank class. """ import pickle import random from savingsaccount import SavingsAccount
class Bank: """This class represents a bank as a collection of savings accounts. An optional file name is also associated with the bank, to allow transfer of accounts to and from permanent file storage."""
"""The state of the bank is a dictionary of accounts and a file name. If the file name is None, a file name for the bank has not yet been established."""
def __init__(self, fileName = None): """Creates a new dictionary to hold the accounts. If a file name is provided, loads the accounts from a file of pickled accounts.""" self.accounts = {} self.fileName = fileName if fileName != None: fileObj = open(fileName, 'rb') while True: try: account = pickle.load(fileObj) self.add(account) except Exception: fileObj.close() break
def __str__(self): """Returns the string representation of the bank.""" return " ".join(map(str, self.accounts.values()))
def makeKey(self, name, pin): """Returns a key for the account.""" return name + "/" + pin
def add(self, account): """Adds the account to the bank.""" key = self.makeKey(account.getName(), account.getPin()) self.accounts[key] = account
def remove(self, name, pin): """Removes the account from the bank and and returns it, or None if the account does not exist.""" key = self.makeKey(name, pin) return self.accounts.pop(key, None)
def get(self, name, pin): """Returns the account from the bank, or returns None if the account does not exist.""" key = self.makeKey(name, pin) return self.accounts.get(key, None)
def computeInterest(self): """Computes and returns the interest on all accounts.""" total = 0 for account in self._accounts.values(): total += account.computeInterest() return total
def getKeys(self): """Returns a sorted list of keys.""" # Exercise return []
def save(self, fileName = None): """Saves pickled accounts to a file. The parameter allows the user to change file names.""" if fileName != None: self.fileName = fileName elif self.fileName == None: return fileObj = open(self.fileName, 'wb') for account in self.accounts.values(): pickle.dump(account, fileObj) fileObj.close()
# Functions for testing def createBank(numAccounts = 1): """Returns a new bank with the given number of accounts.""" names = ("Brandon", "Molly", "Elena", "Mark", "Tricia", "Ken", "Jill", "Jack") bank = Bank() upperPin = numAccounts + 1000 for pinNumber in range(1000, upperPin): name = random.choice(names) balance = float(random.randint(100, 1000)) bank.add(SavingsAccount(name, str(pinNumber), balance)) return bank
def testAccount(): """Test function for savings account.""" account = SavingsAccount("Ken", "1000", 500.00) print(account) print(account.deposit(100)) print("Expect 600:", account.getBalance()) print(account.deposit(-50)) print("Expect 600:", account.getBalance()) print(account.withdraw(100)) print("Expect 500:", account.getBalance()) print(account.withdraw(-50)) print("Expect 500:", account.getBalance()) print(account.withdraw(100000)) print("Expect 500:", account.getBalance())
def main(number = 10, fileName = None): """Creates and prints a bank, either from the optional file name argument or from the optional number.""" testAccount() ## if fileName: ## bank = Bank(fileName) ## else: ## bank = createBank(number) ## print(bank)
if __name__ == "__main__": main()
-------------------------------------------------------------
Savingsaccount.py Code:
""" File: savingsaccount.py This module defines the SavingsAccount class. """
class SavingsAccount: """This class represents a savings account with the owner's name, PIN, and balance."""
RATE = 0.02 # Single rate for all accounts
def __init__(self, name, pin, balance = 0.0): self.name = name self.pin = pin self.balance = balance
def __str__(self): """Returns the string rep.""" result = 'Name: ' + self.name + ' ' result += 'PIN: ' + self.pin + ' ' result += 'Balance: ' + str(self.balance) return result
def getBalance(self): """Returns the current balance.""" return self.balance
def getName(self): """Returns the current name.""" return self.name
def getPin(self): """Returns the current pin.""" return self.pin
def deposit(self, amount): """If the amount is valid, adds it to the balance and returns None; otherwise, returns an error message.""" self.balance += amount return None
def withdraw(self, amount): """If the amount is valid, sunstract it from the balance and returns None; otherwise, returns an error message.""" if amount < 0: return "Amount must be >= 0" elif self.balance < amount: return "Insufficient funds" else: self.balance -= amount return None
def computeInterest(self): """Computes, deposits, and returns the interest.""" interest = self.balance * SavingsAccount.RATE self.deposit(interest) return interest
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started