This repository has been archived on 2025-11-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
small-projects/2020-computer-science-igcse-prerelease.py

126 lines
3.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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))