def validate_input(input_value): try: value = float(input_value) if value < 0: print("값은 0보다 커야 합니다. 기본값 0을 사용합니다.") return 0 return value except ValueError: print("유효하지 않은 입력입니다. 기본값 0을 사용합니다.") return 0 # 입력 검증 예시 tao_low_price = validate_input(input("타오바오 상품의 옵션 최저가(위안): ")) tao_high_price = validate_input(input("타오바오 상품의 옵션 최고가(위안): ")) delv_fee = validate_input(input("상품의 무게에 따른 배송비(원): ")) packing_fee = validate_input(input("포장비(원): ")) ns_low_price = validate_input(input("네이버쇼핑 상품의 최저가(원): ")) ns_high_price = validate_input(input("네이버쇼핑 상품의 최고가(원): ")) # 변수 계산 ns_avg_price = (ns_low_price + ns_high_price) / 2 plus_margin = 5000 # 기본값 # 상수 계산 tao_cost = lambda price: price * 190 * 1.035 base_margin = lambda cost: cost * 0.12 # 판매자 원가와 마진율 계산 함수 def calculate_cost_and_margin(tao_price): tao_cost_val = tao_cost(tao_price) seller_cost = tao_cost_val + delv_fee + packing_fee return_fee = max(seller_cost / 2, seller_cost) selling_price = seller_cost + plus_margin mall_cost = selling_price * 0.13 final_cost = seller_cost + mall_cost final_margin = selling_price - final_cost final_margin_rate = (final_margin / selling_price) * 100 return seller_cost, final_margin, final_margin_rate, selling_price, mall_cost # 네이버 평균가에 근접하도록 상품가 조정 로직 # 초기 plus_margin으로 판매자 원가, 최종 마진, 최종 마진율, 판매가, 마켓 수수료 계산 seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = calculate_cost_and_margin(tao_low_price) # 조건에 따라 plus_margin 조정 # 조건 A, B, C에 따른 로직 추가 예정 # 결과 출력 print(f"결정된 상품가격: {selling_price}원") print(f"그때의 최종마진율: {final_margin_rate:.2f}%") print(f"판매자원가: {seller_cost}원") print(f"기본마진: {base_margin(tao_cost(tao_low_price))}원") print(f"더하기마진: {plus_margin}원") print(f"최종마진(기본마진+더하기마진): {final_margin}원") print(f"네이버평균가: {ns_avg_price}원") # 조정 정밀도 및 반복 횟수 제한을 포함한 마진율 조정 로직 def adjust_plus_margin_improved(tao_price): global plus_margin iteration_limit = 100 # 반복 횟수 제한 current_iteration = 0 while current_iteration < iteration_limit: seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = calculate_cost_and_margin(tao_price) # 네이버 평균가격의 허용 오차범위 내 조정 목표 확인 if selling_price < ns_avg_price * 0.9: plus_margin += 500 # 오차 범위 미만일 경우, plus_margin 증가 elif selling_price > ns_avg_price * 1.1: plus_margin -= 500 # 오차 범위 초과일 경우, plus_margin 감소 else: # 목표 마진율 범위 내에 있는지 확인 if final_margin_rate < 22: plus_margin += 500 # 마진율이 목표 미만일 경우, plus_margin 증가 elif final_margin_rate > 29: plus_margin -= 500 # 마진율이 목표를 초과할 경우, plus_margin 감소 else: break # 목표 마진율 범위 내에 있으면 반복 종료 current_iteration += 1 return calculate_cost_and_margin(tao_price) # 마진율 조정 실행 seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = adjust_plus_margin_improved(tao_low_price) # 결과 출력 print(f"결정된 상품가격: {selling_price}원, 최종 마진율: {final_margin_rate:.2f}%") print(f"판매자 원가: {seller_cost}원, 기본 마진: {base_margin(tao_cost(tao_low_price))}원") print(f"더하기 마진: {plus_margin}원, 최종 마진(기본 마진+더하기 마진): {final_margin}원") print(f"네이버 평균가: {ns_avg_price}원") def adjust_plus_margin_to_ns_lower_bound(tao_price): global plus_margin iteration_limit = 100 # 반복 횟수 제한 current_iteration = 0 while current_iteration < iteration_limit: seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = calculate_cost_and_margin(tao_price) ns_avg_price_lower_bound = ns_avg_price * 0.9 # 네이버 평균가의 하한 # 판매가가 네이버 평균가의 하한보다 낮을 경우, plus_margin을 증가 if selling_price < ns_avg_price_lower_bound: plus_margin_adjustment = (ns_avg_price_lower_bound - selling_price) / (1 - 0.13) # 마켓 수수료 고려 plus_margin += plus_margin_adjustment seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = calculate_cost_and_margin(tao_price) # 조정 후에도 네이버 평균가의 하한보다 낮지 않도록 체크 if selling_price >= ns_avg_price_lower_bound: break else: break # 이미 네이버 평균가의 하한 이상인 경우 반복 종료 current_iteration += 1 return seller_cost, final_margin, final_margin_rate, selling_price, mall_cost # 마진율 조정 실행 seller_cost, final_margin, final_margin_rate, selling_price, mall_cost = adjust_plus_margin_to_ns_lower_bound(tao_low_price) # 결과 출력 print(f"결정된 상품가격: {selling_price}원, 최종 마진율: {final_margin_rate:.2f}%") print(f"판매자 원가: {seller_cost}원, 기본 마진: {base_margin(tao_cost(tao_low_price))}원") print(f"더하기 마진: {plus_margin}원, 최종 마진(기본 마진+더하기 마진): {final_margin}원") print(f"네이버 평균가: {ns_avg_price}원")