I currently implementing a class called BankAccount. It offers the ability to set a balance, make a deposit, make a withdrawal, and check the balance.
Now I have to write a function (called processAccounts()) that will take the name of a file as its parameter. The first line of the file will be a number which specified the initial bank account balance. The lines that follow will specify a series of withdrawals and deposits marked by w or W for withdrawals and d or D for deposits. The function must read the the text file, set the initial balance, and then make withdrawals or deposits based on the contents of the text file.
Here is what I have so far:
class BankAccount:
def set(self,balance=0):
self.balance=balance
def deposit(self,amount):
self.balance += amount
def withdraw(self,amount):
self.balance -= amount
def get_balance(self):
return self.balance
def processAccounts(fname):
with open(fname,'r') as f:
acct=[]
for line in f:
line=line.split()
if line:
line= [int(i) for i in line]
acct.set(line)
Text File:
1000.00
W 50.50
W 5.25
d 100.75
w 525.15
d 85.70
I am currently trying to set up the first part which will read the first line and then call upon the set() function to set the initial balance.
The error I'm getting is:
ValueError: invalid literal for int() with base 10: '1000.00'
Am I approaching this problem incorrectly or did I just not do it correctly?
The general approach is correct, but int is clearly wrong since apparently the amounts are expressed in "dollars.cents".
float would appear to work but would probably not be the right choice: handling monetary amounts is instead the primary reason the decimal module was added to the Python standard library! With decimal you'll get precise computations, without the risk of rounding errors losing or gaining a cent here and there which would unchain The Auditors upon you.
So here's how I'd do it...:
import decimal
class BankAccount:
def set(self,balance=decimal.Decimal('0.00'):
self.balance = balance
# the rest of the class is fine. Shd probably have an __init__ tho.
# also should keep an audit trail of deposit and withdrawals!
def processAccounts(fname):
with open(fname,'r') as f:
start_bal = decimal.Decimal(next(f).strip())
ba = BankAccount()
ba.set(start_bal)
for line in f:
fields = line.strip().split()
if fields:
if fields[0] in 'Ww':
ba.withdraw(decimal.Decimal(fields[1])
elif fields[0] in 'Dd':
ba.deposit(decimal.Decimal(fields[1])
else:
print('Ignoring line: {!r}'.format(line.strip()))
return ba
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With