[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