Spaces:
Runtime error
Runtime error
import streamlit as st | |
# Layout | |
st.set_page_config(page_title='报价计算器') | |
# 设定参数 | |
st.sidebar.header('参数设置') | |
k = st.sidebar.slider('设定最低价', min_value=0, max_value=100, value=10) | |
h = st.sidebar.slider('设定最高价', min_value=0, max_value=100, value=76) | |
max_score = st.sidebar.slider('设定满分', min_value=0, max_value=10, value=2) | |
high_penalty = st.sidebar.slider('设定高价扣分值', min_value=0.00, max_value=0.08, value=0.03, step=0.01) | |
low_penalty = st.sidebar.slider('设定低价扣分值', min_value=0.00, max_value=0.08, value=0.02, step=0.01) | |
step = st.sidebar.slider('设定迭代步长', min_value=0.01, max_value=1.00, value=0.01, step=0.01) | |
def score(price, base_price): | |
deviation_rate = (price - base_price) / base_price | |
if price == base_price: | |
return max_score | |
elif price > base_price: | |
return max(max_score - deviation_rate * 100 * high_penalty, 0) | |
else: | |
return max(max_score - abs(deviation_rate) * 100 * low_penalty, 0) | |
def find_range(): | |
max_score_diff = max_score / 3 # 最大分数差距 | |
A0_range = [k, h] | |
for A6_price in [k, (k+h)/2, h]: | |
temp_range = [0.0, 0.0] | |
for A0_price in [k + x*step for x in range(int((h-k)/step) + 1)]: | |
base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6 | |
A6_score = score(A6_price, base_price) | |
A0_score = score(A0_price, base_price) | |
if A0_score >= A6_score - max_score_diff: | |
temp_range[0] = A0_price | |
break | |
for A0_price in [h - x*step for x in range(int((h-k)/step) + 1)]: | |
base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6 | |
A6_score = score(A6_price, base_price) | |
A0_score = score(A0_price, base_price) | |
if A0_score >= A6_score - max_score_diff: | |
temp_range[1] = A0_price | |
break | |
A0_range = [max(A0_range[0], temp_range[0]), min(A0_range[1], temp_range[1])] | |
return A0_range | |
# Display | |
A0_range = find_range() | |
st.header(f'A0的报价范围是 {A0_range[0]:.2f} 到 {A0_range[1]:.2f}') |