import pandas # Functions go here def int_check(question, low, high): """Checks user enter an integer """ error = f"Oops - please enter a number between {low} and {high} " while True: try: response = int(input(question)) if response >= low and response <= high: return response else: print(error) except ValueError: print(error) def make_statement(statement, decoration, lines=1): """Creates headings (3 lines), subheadings (2lines) and emphasised text / mini-headings (1 line). Only use emoji for single line statements""" middle = f"{decoration * 3} {statement} {decoration * 3}" top_bottom = decoration * len(middle) if lines == 1: print(middle) elif lines == 2: print(middle) print(top_bottom) else: print(top_bottom) print(middle) print(top_bottom) # currency formatting function def currency(x): """Format numbers as currency ($#.##)""" return "${:.2f}".format(x) def string_check(question, valid_answers=('yes', 'no'), num_letters=1): """Checks that users enter the full word or the 'n' letter/s of a word from a list of valid responses""" while True: response = input(question).lower() for item in valid_answers: # check if the response is the entire word if response == item: return item # check if it's the 'n' letters elif response == item[:num_letters]: return item print(f"Please choose an option from {valid_answers}") def not_blank(question): """Checks that a user response is not blank""" while True: response = input(question) if response != "": return response print("Sorry, this can't be blank, Please try again.\n") def instructions(): make_statement("Instructions", "â„šī¸") print(''' For each Customer enter ... - Their name - Their age - The payment method (cash / credit) The program will record the burger's chosen and calculate the order cost, and surcharge. Once you have either bought 5 burger's, the program will display the order information and write the data to a text file (receipt). ''') CREDIT_SURCHARGE = 0.023 # burger ordered list user_burger_choice = [] user_burger_choice_cost = [] user_size_choice = [] user_size_choice_cost = [] order_dict = { 'Item': user_burger_choice, 'Size': user_size_choice, 'burger Price': user_burger_choice_cost, 'Size Price': user_size_choice_cost } # Variables MAX_burger = 5 burger_sold = 0 # burger lists 1 burger_items = ["Cheese", "Pepperoni", "Ham & Cheese", "BBQ", "Veggie", "Meat-lovers", "Spicy chicken", "Pesto", "Hawaiian", "Burger", ] burger_cost = [7.50] * 10 burger_dict_1 = { 'burger': burger_items, 'Price': burger_cost, } # burger list 2 special_burger = ["Desert burger", "Butter Chicken"] special_burger_cost = [6.50, 8.50] burger_dict_2 = { 'Special burger': special_burger, 'Price': special_burger_cost, } # burger sizes burger_size = ["Small", "Medium", "Large"] burger_size_cost = [2.50, 3.50, 4.50] burger_dict_3 = { 'Sizes': burger_size, 'Price': burger_size_cost, } # user order dict # create dataframe/s burger_frame = pandas.DataFrame(burger_dict_1) burger_frame.index = burger_frame.index + 1 burger_frame_2 = pandas.DataFrame(burger_dict_2) burger_frame_2.index = burger_frame_2.index + 1 burger_frame_3 = pandas.DataFrame(burger_dict_3) burger_frame_3.index = burger_frame_3.index + 1 # Currency Formatting (uses currency function) add_dollars = ['Price'] for var_item in add_dollars: burger_frame[var_item] = burger_frame[var_item].apply(currency) burger_frame_2[var_item] = burger_frame_2[var_item].apply(currency) burger_frame_3[var_item] = burger_frame_3[var_item].apply(currency) # Main routine goes here make_statement(statement="Hot Crust Co.", decoration="🍕") print() want_instructions = string_check("Do you want to see the instructions? ") if want_instructions == "yes": instructions() print(burger_frame) make_statement(statement="", decoration="----") print(burger_frame_2) make_statement(statement="", decoration="----") print(burger_frame_3) # initialise variables / non-default options for string checker payment_ans = ('cash', 'credit') print() # ask user for their name name = input("Name: ") # replace with call to 'not blank' function! # Ask for their age and check it's between 12 and 120 age = int_check("Age: ", 12, 120) # Output error message / success message if age < 12: print(f"{name} is too young") elif age > 120: print(f"{name} is too old") else: pass # ask user for payment method (cash / credit / ca / cr) pay_method = string_check("Payment method: ", payment_ans, 2) print() print(f"{name} is ordering ({pay_method})") # Ordering system # Get burger choice while burger_sold < MAX_burger: print() typeofburger = int_check("Would you like a general burger or special burger?(1 for general, 2 for special)", 1, 2) if typeofburger == 1: print("You chose general burger") burger_choice = int_check("Enter burger order number(1-10): ", 1, 10) print() print(f"-{burger_items[burger_choice - 1]}") user_burger_choice.append(burger_items[burger_choice - 1]) user_burger_choice_cost.append(7.5) print() burger_sold += 1 elif typeofburger == 2: print("You chose special burger") burger_choice = int_check("Enter special burger number(1-2): ", 1, 2) print() print(f"{special_burger[burger_choice - 1]}") user_burger_choice.append(special_burger[burger_choice - 1]) user_burger_choice_cost.append(special_burger_cost[burger_choice - 1]) print() burger_sold += 1 print() print(burger_frame_3) print() if burger_sold < MAX_burger: size_choice = int_check("What size would you like? (1 is Small, 2 is Medium, 3 is Large)", 1, 3) print() print(f"You chose {burger_size[size_choice - 1]} ${burger_size_cost[size_choice - 1]}") user_size_choice.append(burger_size[size_choice - 1]) user_size_choice_cost.append(burger_size_cost[size_choice - 1]) print() print(f"burger's ordered: {burger_sold}/{MAX_burger}") print() if burger_sold < MAX_burger: want_burger = string_check("Would you like another burger? ") print() if want_burger == "no": print("Your order will now be processed.") print(f"burger's ordered: {burger_sold}/{MAX_burger}") print(f"Your burger's ") break else: continue if burger_sold == MAX_burger: print("You have reached the max amount of burger!!!") # user order print() order_frame = pandas.DataFrame(order_dict) order_frame.index = order_frame.index + 1 # Currency Formatting (uses currency function) add_dollars_2 = ['burger Price', 'Size Price'] for items in add_dollars_2: order_frame[items] = order_frame[items].apply(currency) print() print(order_frame) print() Order_cost = sum(user_burger_choice_cost + user_size_choice_cost) print(f"Cost: {currency(Order_cost)}") if pay_method == "cash": surcharge = 0 # if paying by credit, calculate surcharge else: surcharge = Order_cost * CREDIT_SURCHARGE total_surcharge = surcharge + Order_cost print(f"Total with surcharge: {currency(total_surcharge)}") print() pickup_delivery = string_check(f"Would you like pickup or delivery for your order?(pickup, delivery)", ('pickup', 'delivery'), 1) if pickup_delivery == 'pickup': print("You have chosen pickup, your order will be here for you to pickup in 15 mins.") if pickup_delivery == 'delivery': delivery_address = input("You have chosen delivery, what is your delivery address?: ") print() print(f"{delivery_address}") print() # create file to hold data (add.txt extension) file_name = "Hot Crust Co" write_to = "{}.txt".format(file_name) text_file = open(write_to, "w+") # strings to write to file... heading = "=== Hot Crust Co. ===\n" customer_details = (f"Name:{name}\n" f"Age: {age}\n" f"payment method:{pay_method}\n") Order_details = (f"{order_frame}") Price_details = (f"Order Cost:{currency(total_surcharge)}") pickup_or_delivery = (f"pick-up or delivery chosen: {pickup_delivery}") # list of strings... to_write = [heading, customer_details, Order_details, "\n", Price_details, pickup_or_delivery] # print the output... for item in to_write: print(item) # write the item to file for item in to_write: text_file.write(item) text_file.write("\n") print("Thank you, your order will now be made.")