XiangJinYu commited on
Commit
2579cbe
·
1 Parent(s): c335611

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -11
app.py CHANGED
@@ -1,13 +1,16 @@
1
-
2
  import streamlit as st
3
 
 
 
 
4
  # 设定参数
5
- k = st.slider('设定最低价', min_value=0, max_value=100, value=10)
6
- h = st.slider('设定最高价', min_value=0, max_value=100, value=76)
7
- max_score = st.slider('设定满分', min_value=0, max_value=10, value=2)
8
- high_penalty = st.slider('设定高价扣分值', min_value=0.00, max_value=0.08, value=0.03, step=0.01)
9
- low_penalty = st.slider('设定低价扣分值', min_value=0.00, max_value=0.08, value=0.02, step=0.01)
10
- step = st.slider('设定迭代步长', min_value=0.01, max_value=1.00, value=0.01, step=0.01)
 
11
 
12
  def score(price, base_price):
13
  deviation_rate = (price - base_price) / base_price
@@ -22,7 +25,6 @@ def find_range():
22
  max_score_diff = max_score / 3 # 最大分数差距
23
  A0_range = [k, h]
24
  for A6_price in [k, (k+h)/2, h]:
25
- # 找到使A0的得分不低于A6的得分的最大值的A0的报价
26
  temp_range = [0.0, 0.0]
27
  for A0_price in [k + x*step for x in range(int((h-k)/step) + 1)]:
28
  base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6
@@ -31,7 +33,6 @@ def find_range():
31
  if A0_score >= A6_score - max_score_diff:
32
  temp_range[0] = A0_price
33
  break
34
- # 找到使A0的得分不低于A6的得分的最小值的A0的报价
35
  for A0_price in [h - x*step for x in range(int((h-k)/step) + 1)]:
36
  base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6
37
  A6_score = score(A6_price, base_price)
@@ -39,10 +40,10 @@ def find_range():
39
  if A0_score >= A6_score - max_score_diff:
40
  temp_range[1] = A0_price
41
  break
42
- # 取交集更新A0_range
43
  A0_range = [max(A0_range[0], temp_range[0]), min(A0_range[1], temp_range[1])]
44
  return A0_range
45
 
 
46
  st.title('A0报价范围计算')
47
  A0_range = find_range()
48
- st.write(f'A0的报价范围是 {A0_range[0]} 到 {A0_range[1]}')
 
 
1
  import streamlit as st
2
 
3
+ # Layout
4
+ st.set_page_config(page_title='报价计算器')
5
+
6
  # 设定参数
7
+ st.sidebar.header('参数设置')
8
+ k = st.sidebar.slider('设定最低价', min_value=0, max_value=100, value=10)
9
+ h = st.sidebar.slider('设定最高价', min_value=0, max_value=100, value=76)
10
+ max_score = st.sidebar.slider('设定满分', min_value=0, max_value=10, value=2)
11
+ high_penalty = st.sidebar.slider('设定高价扣分值', min_value=0.00, max_value=0.05, value=0.03, step=0.01)
12
+ low_penalty = st.sidebar.slider('设定低价扣分值', min_value=0.00, max_value=0.05, value=0.02, step=0.01)
13
+ step = st.sidebar.slider('设定迭代步长', min_value=0.01, max_value=1.00, value=0.01, step=0.01)
14
 
15
  def score(price, base_price):
16
  deviation_rate = (price - base_price) / base_price
 
25
  max_score_diff = max_score / 3 # 最大分数差距
26
  A0_range = [k, h]
27
  for A6_price in [k, (k+h)/2, h]:
 
28
  temp_range = [0.0, 0.0]
29
  for A0_price in [k + x*step for x in range(int((h-k)/step) + 1)]:
30
  base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6
 
33
  if A0_score >= A6_score - max_score_diff:
34
  temp_range[0] = A0_price
35
  break
 
36
  for A0_price in [h - x*step for x in range(int((h-k)/step) + 1)]:
37
  base_price = (h * 2 + k * 2 + A6_price + A0_price) / 6
38
  A6_score = score(A6_price, base_price)
 
40
  if A0_score >= A6_score - max_score_diff:
41
  temp_range[1] = A0_price
42
  break
 
43
  A0_range = [max(A0_range[0], temp_range[0]), min(A0_range[1], temp_range[1])]
44
  return A0_range
45
 
46
+ # Display
47
  st.title('A0报价范围计算')
48
  A0_range = find_range()
49
+ st.header(f'A0的报价范围是 {A0_range[0]:.2f} 到 {A0_range[1]:.2f}')