126 lines
5.8 KiB
Python
126 lines
5.8 KiB
Python
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}원")
|