'IF/ELSE Control flow in Python to work out price of courier service from 4 choices

I cannot seem to understand how to use if/else in the following question:

  1. You need to design a program for a courier company to calculate the cost of sending a parcel.
  2. Ask the user to enter the price of the package they would like to purchase.
  3. Ask the user to enter the total distance of the delivery in kilometers.
  4. Now, add on the delivery costs to get the final cost of the product. There are four categories to factor in when determining a parcel’s final cost, each with two options based on the customer’s delivery preferences. (Use an if else statement based on the choice they make)
  5. Delivery via air ($0.36 per km) or via freight ($0.25 per km)
  6. Full insurance ($50.00) or limited insurance ($25.00)
  7. Gift option ($15.00) or not ($0.00)
  8. Priority delivery ($100.00) or standard delivery ($20.00)
  9. Write code to work out the total cost of the package based on the options selected in each category.


Solution 1:[1]

@Mohseen Ramjan

I used some of the original code, but simplified it a bit.
I am no expert, and I'm sure even this code can be improved a lot.

===== NOTE: our currency is Rand, thus the use of the 'R' =====

But maybe you'll understand this a bit better:

main_product_price = int(float(input("""Please enter the price of the package you would like to purchase:
(Only use numbers, do not inlcude 'R')\n""")))

total_distance = int(float(input("\nPlease enter the total distance of the delivery in Kilometers:\n")))

print ("\nNow please choose your shipping preferences;")


print ("\nWould you prefere Air at R0.36 per km, or Freight at R0.25 per km?")
freight_choise = input("Enter: 'Air' or 'Freight'\n")

cost_per_distance = 0
if freight_choise in ['Freight']:
    cost_per_distance = 0.25
elif freight_choise in ['Air']:
    cost_per_distance = 0.36


print ("\nWould you prefere Full insurance (R50.00), or Limited insurance (R25.00)?")
insurance_choise = input("Enter: 'Full' or 'Limited'?\n")

insurance_cost = 0
if insurance_choise in ['Full']:
    insurance_cost = 50
elif insurance_choise in ['Limited']:
    insurance_cost = 25


print ("\nWould you like to add a Gift for R15.00?")
gift_choise = input("Enter: 'Yes please' or 'No thanks'\n")

gift_cost = 0
if gift_choise in ['Yes please']:
    gift_cost = 15
elif gift_choise in ['No thanks']:
    gift_cost = 0


print ("\nWould you prefere Priority delivery for R100.00, or Standard delivery for R20.00?")
delivery_choise = input("Enter: 'Priority' or 'Standard'\n")

priority_or_standard_delivery = 0
if delivery_choise in ['Priority']:
    priority_or_standard_delivery = 100

elif delivery_choise in ['Standard']:
    priority_or_standard_delivery = 20


total_cost = main_product_price + total_distance*cost_per_distance + insurance_cost + gift_cost + priority_or_standard_delivery
print (f"""\nThis is your Total cost:
R{total_cost}""")

Solution 2:[2]

# Courier cost of delivering parcel
# You can and should add your own assertions and checks if the user input is valid
# I used a list instead of '==' so that you can expand the response options
# There are many other ways to do it, this is just my quick and dirty method
# But I suppose you could iterate from here

def user_input():
  price_of_package = float(input('Input price of package.\n'))
  total_distance = float(input('Input total distance in km\n'))
  freight_or_air = input('Input freight or air delivery?\n').lower()
  full_or_limited_insurance = input('Input full or limited insurance?\n').lower()
  gift_or_not = input('Is this a gift?\n').lower()
  priority_or_standard = input('Is this priority or standard delivery?\n').lower()

  cost_per_distance = 0
  if freight_or_air in ['freight']:
    cost_per_distance = 0.25
  elif freight_or_air in ['air']:
    cost_per_distance = 0.36

  cost_of_insurance = 0
  if full_or_limited_insurance in ['full']:
    cost_of_insurance = 50.00
  elif full_or_limited_insurance in ['limited']:
    cost_of_insurance = 25.00

  cost_of_gift = 0
  if gift_or_not in ['yes']:
    cost_of_gift = 15

  cost_of_delivery = 0
  if priority_or_standard in ['priority']:
    cost_of_delivery = 100
  elif priority_or_standard in ['standard']:
    cost_of_delivery = 20

  print (f'\nThe user has specified that\n\
           price of package: {price_of_package}\n\
           total distance: {total_distance}\n\
           freight or air: {freight_or_air}\n\
           cost per distance {cost_per_distance}\n\
           type of insurance: {full_or_limited_insurance}\n\
           cost of insurance: {cost_per_distance}\n\
           if it is a gift: {gift_or_not}\n\
           cost of gift: {cost_of_gift}\n\
           type of delivery: {priority_or_standard}\n\
           cost of delivery: {cost_of_delivery}.')

  return price_of_package, total_distance, cost_per_distance,\
         cost_of_insurance, cost_of_gift, cost_of_delivery

def total_cost():
  price_of_package, total_distance, cost_per_distance,\
  cost_of_insurance, cost_of_gift, cost_of_delivery = user_input()

  total_cost = price_of_package + total_distance*cost_per_distance +\
               cost_of_insurance + cost_of_gift + cost_of_delivery

  print (f'\nThe total cost is {total_cost}.')
  return total_cost

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 René Nel
Solution 2