Python 실습 18: 판매 시즌

의문


  • 한 소매점에서 매장 전체에 "2개 구매 시 1개 무료"세일을 진행하고 있습니다.
  • 법적인 이유로 기사당 고객에게 $0를 청구할 수 없습니다.
  • 대신 모든 제품에 할인이 적용됩니다.
    --

  • 고객의 장바구니에 대한 가격 목록을 가져오는 기능을 만듭니다.
  • 할인이 적용된 가격을 반환합니다.
  • 모든 가격을 센트로 반올림합니다.


  • 예시



    예를 들어 고객이 a, b, c의 세 가지 제품을 받는 경우:


    제품 A
    제품 B
    제품 C


    $15.99
    $23.50
    $23.50


  • 그녀는 가장 저렴한 것을 무료로 받았기 때문에 $15.99 + $23.50 = $39.49를 지불하게 되지만 영수증에는 다음과 같이 표시됩니다.
  • 제품 A: $15.99 − 특별 할인 = $12.57
  • 제품 B: $23.50 − 특별 할인 = $18.47
  • 제품 C: $10.75 − 특별 할인 = $8.45
  • 합계: $39.49

  • 내 솔루션


  • 알고리즘

  • >>calculate the original price of all the products
      initialise a variable called original_total
      original_total = sum of the shopping cart
    >>calculate the discount given in percentage
    >>>determine how many product should be free
       free_product_number  = length of shopping cart // 3
    >>>calculate the total price of the free product
    >>>>find the lowest (numbers_of_free_product) price in the shopping cart
        initialise a free_product list
        while length of free_product list is not equal to free_product_number:
            for product in shopping cart:
                lowest_product = min(shopping cart)
                add the lowest_product to free_product list
                delete the lowest_product
       initialise a variable called discount_given
       discount_given = sum of the free_product list
    >>>calculate the discount percentage
       discount percentage = 1-(discount_given / original_total)
    >>return the list of all product price with discounted applied
      initialise a discounted_list
      for each product in the shopping cart:
          new_price = product * discount percentage
          then round the new_price to 2 decimal place
          store the new_price to the discounted list
      return the new_list     
    


  • 코드

  • def discount(shopping_cart: list):  
        copy_of_shopping_cart = shopping_cart.copy()  
        # >>calculate the original price of all the products  
        original_total = sum(shopping_cart)  
        free_product_number = len(shopping_cart) // 3 
        # >>>calculate the total price of the free product  
        #    find the lowest (numbers_of_free_product) product in the shopping cart    free_product_list = list()  
        #  set up a loop for free_product_number times:  
        while len(free_product_list) < free_product_number:  
            free_product = min(copy_of_shopping_cart)  
            free_product_list.append(free_product)  
            # remove the lowest product in the shopping cart, so the next lowest product can be found  
            copy_of_shopping_cart.remove(free_product)  
        # calculate the total prise of the free item  
        discount_given = sum(free_product_list)  
        discount_percentage = 1 - (discount_given / original_total)  
        # >>return the list of all product price with discounted applied  
        discounted_list = list()  
        # applied discount to each product in the original list , round to 2 decimal place and add to discounted_list  
        for product in shopping_cart:  
            discounted_product = product * discount_percentage  
            discounted_list.append(round(discounted_product, 2))  
        return discounted_list
    


    기타 솔루션




    def discount(lst):
        free = len(lst) // 3
        # sorted the list in accedning order, and calculate the sum of the non_free item start from the index after the free item.
        pct = sum(sorted(lst)[free:]) / sum(lst)
        return [round(x*pct, 2) for x in lst]
    


    내 반성


  • sorted() 함수와 슬라이싱 방법을 사용하여 목록에서 가장 낮은 항목 찾기를 해결하는 새로운 방법을 배웠습니다
  • .
  • 내 코드가 다른 코드에 비해 매우 긴 것 같습니다. 단축 코드를 더 많이 연습해야 합니다.

  • 신용 거래



    챌린지 찾기edabit

    좋은 웹페이지 즐겨찾기