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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!