AutoPercenty/edit/test_price.py

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}")