Book Ordering and Shipping Program

Smoothie.py """ Smoothie Ordering """ SMOOTHIE1_NAME ="Pineapple Banana" SMOOTHIE1_COST =4.99 SMOOTHIE2_NAME ="Almond Basil" SMOOTHIE2_COST =6.49 SMOOTHIE3_NAME ="Purple Surprise" SMOOTHIE3_COST =0.99 SMOOTHIE4_NAME ="Onion Toffee" SMOOTHIE4_COST =9.99 SIZE1_NAME ="small" SIZE1_COST =-2.0 SIZE2_NAME ="medium" SIZE2_COST =0.0 SIZE3_NAME ="large" SIZE3_COST =2.0 SIZE4_NAME ="galactic" SIZE4_COST =100.0 TOPPING1_NAME ="no topping" TOPPING1_COST =0.0 TOPPING2_NAME ="cinnamon" TOPPING2_COST =1.0 TOPPING3_NAME ="chocolate shavings" TOPPING3_COST =1.0 TOPPING4_NAME ="shredded coconut" TOPPING4_COST =1.0 types_name= [SMOOTHIE1_NAME, SMOOTHIE2_NAME, SMOOTHIE3_NAME, SMOOTHIE4_NAME] types_cost= [SMOOTHIE1_COST, SMOOTHIE2_COST, SMOOTHIE3_COST, SMOOTHIE4_COST] sizes_name= [SIZE1_NAME, SIZE2_NAME, SIZE3_NAME, SIZE4_NAME] sizes_cost= [SIZE1_COST, SIZE2_COST, SIZE3_COST, SIZE4_COST] topping_name= [TOPPING1_NAME, TOPPING2_NAME, TOPPING3_NAME, TOPPING4_NAME] topping_cost= [TOPPING1_COST, TOPPING2_COST, TOPPING3_COST, TOPPING4_COST] defpose_question_with_costs(question, option1, cost1, option2, cost2, option3, cost3, option4, cost4): # Print question print(question) # Print options print("1)\t$ {0:.2f}\t{1}".format(cost1, option1)) print("2)\t$ {0:.2f}\t{1}".format(cost2, option2)) print("3)\t$ {0:.2f}\t{1}".format(cost3, option3)) print("4)\t$ {0:.2f}\t{1}".format(cost4, option4)) option =input("Your choice(1-4): ") ifoption.isnumeric() andint(option) >=1andint(option) <=4: option =int(option) option_name="" if option ==1: option_name= option1 elif option ==2: option_name= option2 elif option ==3: option_name= option3 elif option ==4: option_name= option4 print("You have selected "+option_name+".") returnoption_name return"" defcalculate_subtotal(smoothie_type, smoothie_size, topping): idx1 =types_name.index(smoothie_type) idx2 =sizes_name.index(smoothie_size) idx3 =topping_name.index(topping) subtotal =types_cost[idx1] +sizes_cost[idx2] +topping_cost[idx3] returnround(subtotal, 2) defprint_receipt(subtotal, smoothie_type, smoothie_size, topping): text ="You ordered a "+smoothie_size+" "+smoothie_type+" smoothie" iflen(topping) >0: text = text +" with "+ topping text = text +"." print(text) QST =9.975/100.0*subtotal GST =5.0/100.0*subtotal total = subtotal + QST + GST print("Smoothie cost: $ {0:.2f}".format(subtotal)) print("GST:\t$ {0:.2f}".format(GST)) print("QST:\t$ {0:.2f}".format(QST)) print("Total:\t$ {0:.2f}".format(total)) return total deforder(): print("Welcome to Smooth Smoothies Smoothie Ordering System") print("Have you tried our new Onion Toffee Smoothie?") smoothie =pose_question_with_costs("Which smoothie would you like?", SMOOTHIE1_NAME, SMOOTHIE1_COST, SMOOTHIE2_NAME, SMOOTHIE2_COST, SMOOTHIE3_NAME, SMOOTHIE3_COST, SMOOTHIE4_NAME, SMOOTHIE4_COST) iflen(smoothie) ==0: # empty string print("Sorry, that is not a valid option.") return else: # Check if user selected the new Smoothie ifsmoothie !="Onion Toffee": print("Unfortunely, we are out of "+ smoothie) smoothie ="Onion Toffee" print("You will be served "+ smoothie +" smoothie.") size =pose_question_with_costs("Which size would you like?", SIZE1_NAME, SIZE1_COST, SIZE2_NAME, SIZE2_COST, SIZE3_NAME, SIZE3_COST, SIZE4_NAME, SIZE4_COST) iflen(size) ==0: print("Sorry, that is not a valid option.") return else: topping =pose_question_with_costs("Which topping would you like?", TOPPING1_NAME, TOPPING1_COST, TOPPING2_NAME, TOPPING2_COST, TOPPING3_NAME, TOPPING3_COST, TOPPING4_NAME, TOPPING4_COST) iflen(topping) ==0: print("Sorry, that is not a valid option.") return else: subtotal =calculate_subtotal(smoothie, size, topping) total =print_receipt(subtotal, smoothie, size, topping) Shipment.py importmath # Shipping Books SMALL_DIMENSIONS = [10, 10, 2] MEDIUM_DIMENSIONS = [15, 15, 3] LARGE_DIMENSIONS = [20, 20, 4] defcalculate_isbn_checksum_by_digits(d1, d2, d3, d4, d5, d6, d7, d8, d9): checksum = (d1 +2*d2 +3*d3 +4*d4 +5*d5 +6*d6 +7*d7 +8*d8 +9*d9)%11 returnstr(checksum) defcalculate_isbn_checksum(isbn): # Convert to str isbn_str=str(isbn) n =1 checksum =0 for dinisbn_str: checksum = checksum + n*int(d) n +=1 checksum = checksum %11 returnstr(checksum) defis_isbn(isbn, checksum): returncalculate_isbn_checksum(isbn) == checksum defbooks_fits_in_box(box_w, box_d, box_h, book_w, book_d, book_h): returnbook_w<=box_wandbook_d<=box_dandbook_h<=box_h defget_smalles_box_for_book(book_w, book_d, book_h): # Check with dimensions of boxes, from smalles to larger ifbook_w<= SMALL_DIMENSIONS[0] andbook_d<= SMALL_DIMENSIONS[1] andbook_h<= SMALL_DIMENSIONS[2]: return"small" elifbook_w<= MEDIUM_DIMENSIONS[0] andbook_d<= MEDIUM_DIMENSIONS[1] andbook_h<= MEDIUM_DIMENSIONS[2]: return"medium" elifbook_w<= LARGE_DIMENSIONS[0] andbook_d<= LARGE_DIMENSIONS[1] andbook_h<= LARGE_DIMENSIONS[2]: return"large" return'' defget_num_books_for_box(box_w, box_d, box_h, book_w, book_d, book_h): # Check how many books fits by width n_width=box_w/book_w n_depth=box_d/book_d n_height=box_h/book_h # Now, select the smalles of these three numbers, rounded to lowest n_final=min(n_width, n_depth) n_final=min(n_final, n_height) returnmath.floor(n_final) defmain(): # Show greet message print("Welcome to the shipment calculation system.") print("1) Check ISBN") print("2) Check box/book size") print("3) Get smallest box size for book") print("4) Get num equally-sized books per box") choice =input("Enter choice (1-4): ") ifchoice.isnumeric() andint(choice) >=1andint(choice) <=4: choice =int(choice) if choice ==1: #Check ISBN ISBN =int(input("Enter ISBN: ")) checksum =input("Enter checksum: ") result =is_isbn(ISBN, checksum) if result ==True: print("ISBN is valid (checksum did match).") else: print("ISBN is not valid (checksum did not match).") elif choice ==2: box_w=int(input("Enter box width: ")) box_d=int(input("Enter box depth: ")) box_h=int(input("Enter box height: ")) book_w=int(input("Enter book width: ")) book_d=int(input("Enter book depth: ")) book_h=int(input("Enter book height: ")) result =books_fits_in_box(box_w, box_d, box_h, book_w, book_d, book_h) if result ==True: print("Package does fits in box.") else: print("Package does not fits in box.") elif choice ==3: # Get smallest box size book_w=int(input("Enter book width: ")) book_d=int(input("Enter book depth: ")) book_h=int(input("Enter book height: ")) result =get_smalles_box_for_book(book_w, book_d, book_h) ifresult !="": print("The smaller box for book is "+ result +".") else: print("Package does not fits in any box.") elif choice ==4: box_w=int(input("Enter box width: ")) box_d=int(input("Enter box depth: ")) box_h=int(input("Enter box height: ")) book_w=int(input("Enter book width: ")) book_d=int(input("Enter book depth: ")) book_h=int(input("Enter book height: ")) result =get_num_books_for_box(box_w, box_d, box_h, book_w, book_d, book_h) print("The number of books that fits in the box is "+str(result) +".") Card.py # Cards # Hearts, Diamonds, Clubs, and Spades HEARTS =0 DIAMONDS =1 CLUBS =2 SPADES =3 TWO =0 THREE =1 FOUR =2 FIVE =3 SIX =4 SEVEN =5 EIGHT =6 NINE =7 TEN =8 JACK =9 QUEEN =10 KING =11 ACE =12 defget_suit(card): SUITS = [HEARTS, DIAMONDS, CLUBS, SPADES] k =1 card_copy = card while card_copy >0: card_copy -=4 k +=1 k-=1 return SUITS[card-k*4-1] defget_rank(card): k =0 v =0 for i inrange(1,card+1): v +=1 if v >4: v =1 k +=1 return k defsame_rank(card1, card2): return get_rank(card1) == get_rank(card2) defsame_suit(card1, card2): return get_suit(card1) == get_suit(card2) defsame_color_suit(card1, card2): # Check if both are hearts or both are diamonds, if one is diamond and the other hearth and vice versa # Check if both are clubs or both are spades, if one is a club and the other spade and vice versa # Check if both are hearths cond1 = get_suit(card1) == HEARTS and get_suit(card2) == HEARTS # Check if one is heart and the other is diamond cond2 = (get_suit(card1) == HEARTS and get_suit(card2) == DIAMONDS) or (get_suit(card1) == DIAMONDS and get_suit(card2) == HEARTS) # Check if both are diamonds cond3 = get_suit(card1) == DIAMONDS and get_suit(card2) == DIAMONDS # Check if both are clubs cond4 = get_suit(card1) == CLUBS and get_suit(card2) == CLUBS # Check if one is club and the other is spades cond5 = (get_suit(card1) == CLUBS and get_suit(card2) == SPADES) or (get_suit(card2) == CLUBS and get_suit(card1) == SPADES) # Check of both are spades cond6 = get_suit(card1) == SPADES and get_suit(card2) == SPADES return cond1 or cond2 or cond3 or cond4 or cond5 or cond6