I have created a gorgeous ATM machine program. It makes all other ATMs look like crap, if I do say so myself. What I would like is some sort of critique on what I've done:
- Is there better syntax I could use for the
if/else'ssuch as ternarys? - Can I improve this in any way?
- Can I move more of the code into separate methods?
Source:
from random import randint
# The amount of money that will be processed each time
# taken from randint()
CHECKING_MONEY = randint(0, 1000)
SAVINGS_MONEY = randint(0, 1000)
def die(why):
"""Kill the program."""
print "{} Exiting..".format(why)
quit(1)
def broke(excuse, money):
"""You're broke!"""
print "{}. ${} available in account.".format(excuse, money)
def formatter():
"""Shouldn't have to explain this.."""
return '-' * 50
def prompt(info):
"""Prompt for information"""
return raw_input(info)
def check_if_true(money):
"""Make sure there's money in the accounts."""
if money > 0:
return True
else:
return False
def check_account(money):
"""Function to check account balance."""
print "${} currently available in account".format(money)
choice = prompt("Main Menu? ").lower()
if 'yes' in choice:
welcome_screen()
else:
die("Goodbye.")
def transfer_funds(checking, savings):
"""Function to transfer funds back and forth from accounts."""
total = checking + savings
check = check_if_true(total)
# If the check returns true then continue with the function
if check == True:
print """
[ 1 ] Checking account to Savings account
[ 2 ] Savings account to Checking account
[ 3 ] Return to Main Menu
"""
choice = int(prompt("Which account: "))
print formatter() # formatting makes everything pretty
if choice == 1:
print "Currently ${} in Checking account.".format(checking)
amount = int(prompt("Enter amount to transfer to Savings account: $"))
if amount > checking: # Only allow an amount less than the amount in checking
print "You do not have that much money."
transfer_funds(checking, savings)
else:
checking -= amount
savings += amount
print "${} withdrawn from Checking and added to Savings.".format(amount)
print "${} left in Checking account.".format(checking)
print "${} now in Savings account.".format(savings)
choice = prompt("Transfer more funds? ").lower()
print formatter()
if 'no' in choice:
die("Goodbye.")
print formatter()
else:
transfer_funds(checking, savings) # recursively loop back to the function
elif choice == 2:
print "Currently ${} in Savings account.".format(savings)
amount = int(prompt("Enter amount to transfer to Checking account: $"))
if amount > savings:
print "You do not have that much money."
print formatter()
transfer_funds(checking, savings)
else:
savings -= amount
checking += amount
print "${} withdrawn from Savings and added to Checking.".format(amount)
print "${} left in Savings account.".format(savings)
print "${} now in Checking account.".format(checking)
choice = prompt("Transfer more funds? ").lower()
print formatter()
if 'no' in choice:
die("Goodbye.")
print formatter()
else:
print formatter()
transfer_funds(checking, savings)
elif choice == 3:
welcome_screen()
else:
die("Invalid option.")
else:
broke("You do not have enough money.", total)
def withdraw_funds(checking, savings):
"""Function to withdraw funds from the accounts."""
money_in_checking = check_if_true(checking)
money_in_savings = check_if_true(savings)
print """
[ 1 ] Withdraw from Checking account
[ 2 ] Withdraw from Savings account
[ 3 ] Return to Main Menu
"""
choice = int(prompt("Which account would you like to withdraw from? "))
print formatter()
if choice == 1:
if money_in_checking == True:
print "${} currently available in Checking account.".format(checking)
while checking > 0: # While the accounts balance isn't 0.
amount = int(prompt("Enter amount to withdraw from Checking account: $"))
if amount <= checking:
checking -= amount
print "${} withdrawn from Checking. ${} left.".format(amount, checking)
again = prompt("Withdraw more funds? ").lower()
print formatter()
if 'no' in again:
die("Goodbye")
else:
withdraw_funds(checking, savings)
else:
print "You do not have that much money."
print formatter()
withdraw_funds(checking, savings)
else:
print "Unable to withdraw anymore ${} currently available in account.".format(checking)
else:
broke("Unable to withdraw anymore money", checking)
welcome_screen() # recursively loop back to the welcome screen
elif choice == 2:
if money_in_savings == True:
while savings > 0:
print "${} currently available in Savings account.".format(savings)
amount = int(prompt("Enter amount to withdraw from Savings account: $"))
if amount <= savings:
savings -= amount
print "${} withdrawn from Savings. ${} left.".format(amount, savings)
again = prompt("Withdraw more funds? ").lower()
print formatter()
if 'no' in again:
die("Goodbye")
else:
amount = int(prompt("Enter amount to withdraw from Savings account: $"))
else:
print "You do not have that much money."
print formatter()
withdraw_funds(checking, savings)
else:
print "Unable to withdraw anymore ${} currently available in account.".format(savings)
else:
broke("Unable to withdraw anymore money", savings)
welcome_screen()
elif choice == 3:
welcome_screen()
else:
die("Invalid option.")
def deposit_funds(checking, savings):
"""Function to deposit funds into the accounts."""
print """
[ 1 ] Deposit into Checking account
[ 2 ] Deposit into savings account
[ 3 ] Return to Main Menu
"""
choice = int(prompt("Which account: "))
print formatter()
if choice == 1:
amount = int(prompt("Enter amount to deposit into Checking: "))
checking += amount
print "${} now available in Checking account.".format(checking)
more = prompt("Deposit more? ")
if 'no' in more: # If you say no it will exit.
die("Goodbye")
else:
print formatter()
deposit_funds(checking, savings)
elif choice == 2:
amount = int(prompt("Enter amount to deposit into Savings: "))
savings += amount
print "${} now available in Savings account.".format(savings)
more = prompt("Deposit more? ")
if 'no' in more:
die("Goodbye")
else:
print formatter()
deposit_funds(checking, savings)
elif choice == 3:
welcome_screen()
else:
die("Invalid choice")
def welcome_screen():
"""Main function of the program"""
print formatter()
print """
Welcome to the Bank!
Options include:
[ 1 ] View Checking account
[ 2 ] View Savings account
[ 3 ] Transfer funds
[ 4 ] Withdraw funds
[ 5 ] Deposit funds
"""
choice = int(prompt("What would you like to do: "))
print formatter()
if choice == 1:
check_account(CHECKING_MONEY)
elif choice == 2:
check_account(SAVINGS_MONEY)
elif choice == 3:
transfer_funds(CHECKING_MONEY, SAVINGS_MONEY)
elif choice == 4:
withdraw_funds(CHECKING_MONEY, SAVINGS_MONEY)
elif choice == 5:
deposit_funds(CHECKING_MONEY, SAVINGS_MONEY)
else:
die("Invalid option.")
if __name__ == '__main__':
welcome_screen()
