From 02d4d2e5ab16f27167d184fab73a243478139774 Mon Sep 17 00:00:00 2001 From: Matthew Grove Date: Thu, 26 Mar 2020 10:32:36 +0000 Subject: [PATCH] Copy 2020 prerelease to new file --- 2020-computer-science-igcse-prerelease.py | 125 ++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 2020-computer-science-igcse-prerelease.py diff --git a/2020-computer-science-igcse-prerelease.py b/2020-computer-science-igcse-prerelease.py new file mode 100644 index 0000000..345838a --- /dev/null +++ b/2020-computer-science-igcse-prerelease.py @@ -0,0 +1,125 @@ +# retrieve user input & validate it +def get_input(dict): + tmp = None + # keep asking until input is valid + while (not tmp): + # get input, strip spaces and convert to uppercase + tmp = input().upper().strip() + # if input isn't a valid product code + if (not tmp in dict.keys()): + # print error + print("Please enter a valid product code.") + # reset input to blank, so user is asked again + tmp = None + # return input + return tmp + +# print available options +def print_details(dict): + # for every item + for item in dict.keys(): + # display product code, price and description + print("%s: $%.2f, %s" % (item, dict[item][0], dict[item][1])) + +# print chosen option from dictionary and return cost +def print_chosen(dict, item): + # print product code and description + print("%s: %s" % (item, dict[item][1])) + # return cost + return dict[item][0] + +# dictionaries of for items, prices and descriptions +phones_dict = {"BPCM": (29.99, "Compact"), + "BPSH": (49.99, "Clam Shell"), + "RPSH": (199.99, "RoboPhone – 5-inch screen and 64 GB memory"), + "RPLL": (499.99, "RoboPhone – 6-inch screen and 256 GB memory"), + "YPLS": (549.99, "Y-Phone Standard – 6-inch screen and 64 GB memory"), + "YPLL": (649.99, "Y-Phone Deluxe – 6-inch screen and 256 GB memory")} + +tablets_dict = {"RTMS": (149.99, "RoboTab – 8-inch screen and 64 GB memory"), + "RTLM": (299.99, "RoboTab – 10-inch screen and 128 GB memory"), + "YTLM": (499.99, "Y-Tab Standard – 10-inch screen and 128 GB memory"), + "YTLL": (599.99, "Y-Tab Deluxe – 10-inch screen and 256 GB memory")} + +# dictionary for all devices (phones and tablets) +devices_dict = {**phones_dict, **tablets_dict} + +# dictionary for SIMs +sims_dict = {"SMNO": (0.00, "SIM Free (no SIM card purchased)"), + "SMPG": (9.99, "Pay As You Go (SIM card purchased)")} + +# dictionary for cases +case_dict = {"CSST": (0.00, "Standard"), + "CSLX": (50.00, "Luxury")} + +# dictionary for chargers +charger_dict = {"CGCR": (19.99, "Car"), + "CGHM": (15.99, "Home")} + +# total cost +total = 0 +# total amount of money saved +saving = 0 +# ensure user is asked for input until they don't want more devices +run = True +# total number of devices ordered +devices = 0 + +# run until user doesn't want any more devices +while run: + # get chosen device + print("Choose an option:") + print_details(devices_dict) + device = get_input(devices_dict) + # increase number of devices ordered + devices += 1 + + # if phone chosen + if (device in phones_dict.keys()): + # get chosen SIM + print("Choose an option:") + print_details(sims_dict) + sim_payg = get_input(sims_dict) + + # get chosen case + print("Choose an option:") + print_details(case_dict) + case = get_input(case_dict) + + # get chosen charger(s) + print("Which charger(s) would you like? Enter the codes for those you want with a space between them, or enter nothing to choose neither") + print_details(charger_dict) + # create array of chosen chargers + chargers = input().upper().split(" ") + # remove invalid product codes + for item in chargers: + if item not in charger_dict: + chargers.remove(item) + + # if not first device, apply discount + if (devices > 1): + # add cost of device to total + total += 0.9 * \ + print_chosen(devices_dict, device) + # record discount applied + saving += 0.1 * \ + print_chosen(devices_dict, device) + # if first device, don't apply discount + else: + # add cost of device to total + total += print_chosen(devices_dict, device) + # if phone chosen, add cost of SIM to total + if (device in phones_dict): + total += print_chosen(sims_dict, sim_payg) + # add cost of chosen case to total + total += print_chosen(case_dict, case) + # add cost of chosen chargers to total + for charger in chargers: + total += print_chosen(charger_dict, charger) + # print subtotal + print("Subtotal: $%.2f" % total) + # ask if user want another device, and keep running if they do + run = True if (input("Would you like another device (y/n)?").lower().strip()[0] == "y") else False + +# print total cost and saving +print("Total: $%.2f\nSaving: $%.2f" % (total, saving))