In [11]:
from enum import Enum
import sys
class Soda:
def __init__(self, name, price):
self.price = price
self.name = name
def __str__(self):
return self.name
class Coin(Enum):
cent = 1
nickel = 5
dime = 10
quarter = 25
def __str__(self):
return name
class WendingMachine:
def __init__(self):
self.soda_inventory = {}
self.coin_inventory = {}
self.accepted_money = 0
self.selected_soda = None
self.incomplete_txn_coins = None
def __str__(self):
items = []
for k,v in self.soda_inventory.iteritems():
items.append(str(v) +" of "+k.name+" left" )
items.append("******************************")
for k,v in self.coin_inventory.iteritems():
items.append(str(v) +" "+k.name+" left" )
items.append("******************************")
items.append("Soda: "+self.selected_soda.name if self.selected_soda.name is not None else "None Selected")
items.append("******************************")
items.append("TXN: "+ ", ".join([k.name for k in self.incomplete_txn_coins ])if self.incomplete_txn_coins is not None else "Txn not started")
items.append("******************************")
items.append("Accepted Money: "+ str(self.accepted_money)+" cents")
items.append("******************************")
return "\n".join(items)
def select_soda_show_price(self, soda):
self.selected_soda = soda
return self.selected_soda.price
def accept_money(self, coin_list):
if self.incomplete_txn_coins is None:
self.incomplete_txn_coins = coin_list
else:
self.incomplete_txn_coins.extend(coin_list)
for coin in coin_list:
self.accepted_money += coin.value
self.coin_inventory[coin] = self.coin_inventory.get(coin,0)+1
return self.accepted_money >= self.selected_soda.price *100
def calculate_return(self):
return_amount = self.accepted_money - self.selected_soda.price*100
temp_return = return_amount
quarters=int(temp_return/Coin.quarter.value)
temp_return = temp_return%Coin.quarter.value
dimes = int(temp_return/Coin.dime.value)
temp_return = temp_return%Coin.dime.value
nickels = int(temp_return/Coin.nickel.value)
cents = temp_return%Coin.nickel.value
return [return_amount, (quarters, dimes, nickels, cents)]
def return_money(self,coin_count):
quarters,dimes,nickels,cents = coin_count
self.coin_inventory[quarters] -= quarters
self.coin_inventory[dimes] -= dimes
self.coin_inventory[nickels] -= nickels
self.coin_inventory[dimes] -= dimes
def cancel_txn(self):
self.return_money(self.incomplete_txn_coins)
quarters = filter(lambda x: x is )
self.incomplete_txn_coins = None
self.selected_soda = None
self.accepted_money = 0
def transaction_complete(self):
self.accepted_money = 0
self.incomplete_txn_coins = None
In [14]:
w = WendingMachine()
coke = Soda("Coke",1.25)
pepsi = Soda("Pepsi",1.19)
md = Soda("Mountain Dew",.99)
mp = Soda("Mr.Pepper",1.25)
w.soda_inventory = {coke:100, pepsi:100, md:50, mp :75}
w.coin_inventory = {Coin.quarter:1000, Coin.dime:1000, Coin.nickel:1000, Coin.cent:10000}
w.select_soda_show_price(coke)
print w.accept_money([Coin.quarter, Coin.quarter, Coin.quarter])
print w.accept_money([Coin.quarter, Coin.dime])
print w.accept_money([Coin.quarter])
print w.accepted_money, w.incomplete_txn_coins
print w.calculate_return()
print w.cancel_txn()
In [6]:
print w
In [7]:
def calculate_return(return_amount):
# return_amount = self.accepted_money = self.selected_soda.price
temp_return = return_amount
quarters=temp_return/Coin.quarter.value
temp_return = temp_return%Coin.quarter.value
dimes = temp_return/Coin.dime.value
temp_return = temp_return%Coin.dime.value
nickels = temp_return/Coin.nickel.value
cents = temp_return%Coin.nickel.value
return quarters, dimes, nickels, cents
calculate_return(624)
Out[7]:
In [108]:
37%25 == 37-(37/25)*25
Out[108]:
In [ ]: