Decimal Subtraction
Help, Im writing a vending machine based program, and the user's credit is re-displayed to the user when they purchase an item, but all prices are in decimal form. But when I purch
Solution 1:
So your code bugged me alot. I made some changes to make things more pythonic...
- Instead of separate lists for your menu, I made it a list of tuples containing the product and it's price
- I fixed your float casts
There's alot to be done for example, catching errors on invalid inputs, checking for available credit before subtracting price, etc...
products = [
("Kinder Bueno", 0.65),
("Doritos Chilli Heatwave", 0.70),
("Nestle Yorkie Bar", 0.50),
("Coca Cola(Can)", 0.70),
("Volvic Stawberry Water", 0.80)
]
min_price = min(products, key=lambda x:x[1])[1]
credit = float(raw_input("Please input your change, CAREFUL! This Machine only accepts 10p,20p,50p and £1: \n Please enter your change in Pence, at least {0} (Decimal form). e.g' 1.35 ".format(min_price)))
while credit < min_price:
credit += float(raw_input("Please input more change, you have {0} available, please input at least {1} more: ".format(credit, min_price - credit)))
print"You have {0} credit available.".format(credit)
print"The product selection is the following:"for i, (product, price) inenumerate(products):
print" {0}) {1} {2}".format(i, product, price)
selection = int(raw_input("Please select a product: "))
if0 >= selection < len(products):
product, price = products[selection]
print"You bought {0} for {1}".format(product, price)
new_credit = credit - price
print"Your remaining credit is: ", new_credit
With the list of tuples, you can easily get a minimum price to ensure the user has enough to actually buy something:
min_price = min(products, key=lambda x:x[1])[1]
which gets the tuple with the lowest price and stores just the price in min_price
Post a Comment for "Decimal Subtraction"