Here is my go at it. Modified
There is room for improvement.
There is room for improvement.
#! /usr/bin/env python3 from subprocess import call import os call('clear' if os.name == 'posix' else 'cls') class Menu: def __init__(self): pass def menu(self): self.menuitems = {'coffee':1.25, 'tea': 1, 'coke':1.75, 'water':.5} return self.menuitems class AddTax: def add_tax(self, total, tax): return total*tax class Discount: def discount(self, total, discount_amount=0): return total*discount_amount class Display: def output(self, text): print(text.title()) class Controller: def __init__(self, menu=None, addtax=None, discount=None, display=None): self.menu = menu or Menu() self.addtax = addtax or AddTax() self.discount = discount or Discount() self.display = display or Display() def show_menu(self): dodads = [] for k, val in self.menu.menu().items(): dodads.append(f'{k}: ${format(val, "0.2f")}') self.display.output(f'Menu: {", ".join(dodads)}') def main(): controller = Controller() while True: try: print('What would you like to drink?') print('Format is item amount seperated by comma or space.') print('Example: coke 3, tea 1') print() controller.show_menu() order = input('>> ').lower().split() while True: print('Are you a member? (y/n)') member = input('>>> ') print() print('--------------- Receipt ------------') if member.strip() == 'y' or member.strip() == 'yes': membership = True break else: membership = False break if order and len(order) >= 2: iters = iter(order) result = dict(zip(iters, iters)) total = [] combined_total = [] for menuitem, amount in result.items(): if menuitem in controller.menu.menu().keys(): total.append(controller.menu.menu()[menuitem]) cost = controller.menu.menu()[menuitem] totalcost = f"{format(cost*int(amount.replace(',', ' ')), '0.2f')}" combined_total.append(float(totalcost)) controller.display.output(f'Item: {menuitem} {" ":>2} Amount: {amount} {" ":>2} Cost: ${format(cost, "0.2f")} {" ":>2} Total: ${totalcost}') else: controller.display.output(f'Item: {menuitem} is not on the menu.') print() total = sum(combined_total) if membership == True: discount = controller.discount.discount(total, 0.15) else: discount = 0 newtotal = total-discount tax = controller.addtax.add_tax(newtotal, 0.09) finaltotal = newtotal+tax controller.display.output(f'Total: ${format(total,"0.2f")}') controller.display.output(f'Discount: - ${format(discount, "0.2f")}') controller.display.output(f'Total: ${format(newtotal,"0.2f")}') controller.display.output(f'Tax: ${format(tax,"0.2f")}') controller.display.output(f'Total: ${format(finaltotal,"0.2f")}') break else: print('You will need to enter both item and amout.') continue except ValueError as error: print(error) if __name__ == '__main__': main()
Output:What would you like to drink?
Format is item amount seperated by comma or space.
Example: coke 3, tea 1
Menu: Coffee: $1.25, Tea: $1.00, Coke: $1.75, Water: $0.50
>> coke 2, tea 3, pepsi 1
Are you a member? (y/n)
>>> y
--------------- Receipt ------------
Item: Coke Amount: 2, Cost: $1.75 Total: $3.50
Item: Tea Amount: 3, Cost: $1.00 Total: $3.00
Sorry, Pepsi Is Not On The Menu.
Total: $6.50
Discount: - $0.97
Total: $5.53
Tax: $0.50
Total: $6.02
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags