Add comments and move some functions to a class

This commit is contained in:
2020-02-12 12:35:36 +00:00
parent 81ab430b46
commit 58d47d0187

View File

@@ -210,117 +210,135 @@ def prerelease_047822_india_2020():
payments_number = [1, 48, 80] payments_number = [1, 48, 80]
print("%d payment(s) of Rs %.2f" % (payments_number[payment_option - 1], cost / payments_number[payment_option - 1])) print("%d payment(s) of Rs %.2f" % (payments_number[payment_option - 1], cost / payments_number[payment_option - 1]))
def get_input(dict): # 2020 Cambridge iGCSE Computer Science prerelease (UK 1)
tmp = None class prerelease_098421_uk_1_2020:
while (not tmp): def __init__(self):
tmp = input().upper().strip() prerelease_098421_uk_1_2020.run(self)
if (not tmp in dict.keys()):
print("Please enter a valid product code.")
device = None
return tmp
def print_details(dict): # retrieve user input & validate it
for item in dict.keys(): def get_input(self, dict):
print("%s: $%.2f, %s" % (item, dict[item][0], dict[item][1])) 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
def print_chosen(dict, item): # print available options
print("%s: %s" % (item, dict[item][1])) def print_details(self, dict):
return dict[item][0] # 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]))
def prerelease_098421_uk_1_2020(): # print chosen option from dictionary and return cost
# dictionaries of for items, prices and descriptions def print_chosen(self, dict, item):
phones_dict = {"BPCM": (29.99, "Compact"), # print product code and description
"BPSH": (49.99, "Clam Shell"), print("%s: %s" % (item, dict[item][1]))
"RPSH": (199.99, "RoboPhone 5-inch screen and 64 GB memory"), # return cost
"RPLL": (499.99,"RoboPhone 6-inch screen and 256 GB memory"), return dict[item][0]
"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"), def run(self):
"RTLM": (299.99, "RoboTab 10-inch screen and 128 GB memory"), # dictionaries of for items, prices and descriptions
"YTLM": (499.99, "Y-Tab Standard 10-inch screen and 128 GB memory"), phones_dict = {"BPCM": (29.99, "Compact"),
"YTLL": (599.99, "Y-Tab Deluxe 10-inch screen and 256 GB memory")} "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")}
# dictionary for all devices (phones and tablets) tablets_dict = {"RTMS": (149.99, "RoboTab 8-inch screen and 64 GB memory"),
devices_dict = {**phones_dict , **tablets_dict} "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 SIMs # dictionary for all devices (phones and tablets)
sims_dict = {"SMNO": (0.00, "SIM Free (no SIM card purchased)"), devices_dict = {**phones_dict , **tablets_dict}
"SMPG": (9.99, "Pay As You Go (SIM card purchased)")}
# dictionary for cases # dictionary for SIMs
case_dict = {"CSST": (0.00, "Standard"), sims_dict = {"SMNO": (0.00, "SIM Free (no SIM card purchased)"),
"CSLX": (50.00, "Luxury")} "SMPG": (9.99, "Pay As You Go (SIM card purchased)")}
# dictionary for chargers # dictionary for cases
charger_dict = {"CGCR": (19.99, "Car"), case_dict = {"CSST": (0.00, "Standard"),
"CGHM": (15.99, "Home")} "CSLX": (50.00, "Luxury")}
# total cost # dictionary for chargers
total = 0 charger_dict = {"CGCR": (19.99, "Car"),
# total amount of money saved "CGHM": (15.99, "Home")}
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 # total cost
while run: total = 0
# get chosen device # total amount of money saved
print("Choose an option:") saving = 0
print_details(devices_dict) # ensure user is asked for input until they don't want more devices
device = get_input(devices_dict) run = True
# increase number of devices ordered # total number of devices ordered
devices += 1 devices = 0
# if phone chosen # run until user doesn't want any more devices
if (device in phones_dict.keys()): while run:
# get chosen SIM # get chosen device
print("Choose an option:") print("Choose an option:")
print_details(sims_dict) prerelease_098421_uk_1_2020.print_details(self, devices_dict)
sim_payg = get_input(sims_dict) device = prerelease_098421_uk_1_2020.get_input(self, devices_dict)
# increase number of devices ordered
devices += 1
# get chosen case # if phone chosen
print("Choose an option:") if (device in phones_dict.keys()):
print_details(case_dict) # get chosen SIM
case = get_input(case_dict) print("Choose an option:")
prerelease_098421_uk_1_2020.print_details(self, sims_dict)
sim_payg = prerelease_098421_uk_1_2020.get_input(self, sims_dict)
# get chosen charger(s) # get chosen case
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("Choose an option:")
print_details(charger_dict) prerelease_098421_uk_1_2020.print_details(self, case_dict)
# create array of chosen chargers case = prerelease_098421_uk_1_2020.get_input(self, case_dict)
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 # get chosen charger(s)
if (devices > 1): 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")
# add cost of device to total prerelease_098421_uk_1_2020.print_details(self, charger_dict)
total += 0.9 * print_chosen(devices_dict, device) # create array of chosen chargers
# record discount applied chargers = input().upper().split(" ")
saving += 0.1 * print_chosen(devices_dict, device) # remove invalid product codes
# if first device, don't apply discount for item in chargers:
else: if item not in charger_dict:
# add cost of device to total chargers.remove(item)
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 # if not first device, apply discount
print("Total: $%.2f\nSaving: $%.2f" % (total, saving)) if (devices > 1):
# add cost of device to total
total += 0.9 * prerelease_098421_uk_1_2020.print_chosen(self, devices_dict, device)
# record discount applied
saving += 0.1 * prerelease_098421_uk_1_2020.print_chosen(self, devices_dict, device)
# if first device, don't apply discount
else:
# add cost of device to total
total += prerelease_098421_uk_1_2020.print_chosen(self, devices_dict, device)
# if phone chosen, add cost of SIM to total
if (device in phones_dict):
total += prerelease_098421_uk_1_2020.print_chosen(self, sims_dict, sim_payg)
# add cost of chosen case to total
total += prerelease_098421_uk_1_2020.print_chosen(self, case_dict, case)
# add cost of chosen chargers to total
for charger in chargers:
total += prerelease_098421_uk_1_2020.print_chosen(self, 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))
prerelease_098421_uk_1_2020() prerelease_098421_uk_1_2020()