[Tutor] Why doesn't it save the data before exiting?
Bob Gailer
bgailer at alum.rpi.edu
Tue Jun 27 01:12:12 CEST 2006
Nathan Pinno wrote:
> Hey all,
>
> I am needing help on this. Why isn't it saving the data beore exiting
> the program?
But it does save it. What evidence do you have that it is not?
Please in the future always tell us what the evidence of a problem is.
Also I suggest you add validation of user input, to avoid the program
terminating if the user hits the wrong key. In fact the whole menu thing
would be easier to manage if the choices were character rather than
integer. Then you don't need int() conversion and the exception raising
if the user does not enter an integer string.
Similar comment regarding checking input before applying float().
Consider % formatting for the outputs as in:
print "%s\t $%2f\n" % (account, accountlist[account]) # instead of
print account+"\t $"+str(accountlist[account]),"\n"
Also I suggest you not open store for writing until just before the
pickle.dump. Otherwise it is possible to have an empty file on which
pickle.load will raise an exception.
> I don't get an error before exiting.
Good. You should not, unless you enter something that won't convert to
integer, or string, or you leave an empty account.txt file.
>
> Here's the code so far:
> accountlist = {}
>
> def load_file(ac):
> import os
> import pickle
> filename = 'accounts.txt'
> if os.path.exists(filename):
> store = open(filename, 'r')
> ac = pickle.load(store)
> else:
> store = open(filename, 'w')
> store.close()
>
> def save_file(ac):
> import pickle
> store = open('accounts.txt', 'w')
> pickle.dump(ac, store)
> store.close()
>
> def main_menu():
> print "1) Add a new account"
> print "2) Remove a account"
> print "3) Print all info"
> print "4) Find account"
> print "5) Deposit"
> print "6) Withdraw funds"
> print "9) Save and exit."
>
> def add():
> print "Add a new account"
> account = raw_input("Account Name: ")
> amount = float(raw_input("Amount: "))
> accountlist[account] = amount
>
> def remove():
> print "Remove a account"
> account = raw_input("Account: ")
> if accountlist.has_key(account):
> del accountlist[account]
> else:
> print account," was not found."
>
> def printall():
> print "Account Info"
> for account in accountlist.keys():
> print account+"\t $"+str(accountlist[account]),"\n"
>
> def lookup():
> print "Specific Account Info"
> account = raw_input("Account: ")
> if accountlist.has_key(account):
> print account+"\t $"+str(accountlist[account]),"\n"
> else:
> print account," was not found."
>
> def deposit():
> print "Deposit funds"
> account = raw_input("Account: ")
> if accountlist.has_key(account):
> amount = float(raw_input("Amount: "))
> accountlist[account] += amount
> print account+"\t $"+str(accountlist[account]),"\n"
> else:
> print account," was not found."
>
> def withdraw():
> print "Withdraw Funds."
> account = raw_input("Account: ")
> if accountlist.has_key(account):
> amount = float(raw_input("Amount: "))
> accountlist[account] -= amount
> print account+"\t $"+str(accountlist[account]),"\n"
> else:
> print account," was not found."
>
> print "Account Tracker"
> print "By Nathan Pinno"
> print
> load_file(accountlist)
> while 1:
> main_menu()
> menu_choice = int(raw_input("Which item? "))
> if menu_choice == 1:
> add()
> elif menu_choice == 2:
> remove()
> elif menu_choice == 3:
> printall()
> elif menu_choice == 4:
> lookup()
> elif menu_choice == 5:
> deposit()
> elif menu_choice == 6:
> withdraw()
> elif menu_choice == 9:
> break
> else:
> print "That's not an option. Please choose a valid option."
> save_file(accountlist)
> print "Have a nice day!"
>
> Thanks for the help so far!
> Nathan Pinno
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
--
Bob Gailer
510-978-4454
More information about the Tutor
mailing list