齐旭要用这玩意帮他开发一个
源码贴在这里了
inte=[]
with open("Interval.txt", "r") as f:
for line in f.readlines():
inte.append(list(map(int,line.strip('\n').split()))) #去掉列表中每一个元素的换行符
def listisok():
if(len(inte)!=2):
print("请检查配置文件行数是否正确!")
return 0
d=inte[0]
e=inte[1]
if(len(d)!=len(e)+1):
print("区间数和价格数未对齐")
return 0
m=-1
for i in d:
if(i<=m):
print("请检查区间分割是否为递增序列,且大于等于0")
return 0
m=i
m=-1
for i in e:
if(i<=m):
print("警告:推荐分数段越高价格越高,请检查价格序列是否为递增序列!")
m=i
return 1
print("价格计算器-------yanchang开发")
print("📮287829485@qq.com")
print("CTRL + C 退出程序")
print("输入当前分数,输入目标分数---可将输出内容发送给顾客")
print(f"当前区间为{inte[0]}")
print(f"区间价格为别为{inte[1]}")
while 1:
ok=listisok()
a=0;b=0
if(ok):
a=input("请输入当前分数:")
b=input("请输入目标分数:")
if(a.isdigit()and b.isdigit()):
a=int(a)
b=int(b)
sums=0
if(a>=b):
print("当前分数大于或者等于目标分数,请检查后重新输入")
elif(a<inte[0][0] or b<inte[0][0]):
print("值可能小于设置的区间最小值")
elif(a>inte[0][-1] or b>inte[0][-1]):
print("值可能大于设置的区间最大值")
else:
l=0;r=0;dell=0
while(inte[0][l]<a):
l+=1
while(inte[0][r]<b):
r+=1
print(l,r)
if(l==r):
dell=b-a
dell=dell/(inte[0][l]-inte[0][l-1])
dell=dell*inte[1][l-1]
sums+=dell
print(f"{a}-{b}区间收费{sums}")
else:
if(inte[0][l]==a):
dell=0
else:
dell=inte[0][l]-a
dell=dell/(inte[0][l]-inte[0][l-1])
dell=dell*inte[1][l-1]
sums+=dell
print(f"{a}-{inte[0][l]}区间收费{dell}")
if(inte[0][r]==b):
while(l<r):
sums+=inte[1][l]
print(f"{inte[0][l]}-{inte[0][l+1]}区间收费{inte[1][l]}")
l+=1
dell=0
else:
while(l<r-1):
sums+=inte[1][l]
print(f"{inte[0][l]}-{inte[0][l+1]}区间收费{inte[1][l]}")
l+=1
dell=b-inte[0][r-1]
dell=dell/(inte[0][r]-inte[0][r-1])
dell=dell*inte[1][r-1]
sums+=dell
print(f"{inte[0][r-1]}-{b}区间收费{dell}")
print(f"收费为{sums}")
else:
print("请检查输入是否为数字")
else:
print("配置文件出现错误,请检查配置文件行数或者区间序列是否正确")
input("按回车退出")
break
重构优化后的代码为
# 配置文件名
CONFIG_FILE = "Interval.txt"
def load_intervals_and_prices():
"""从配置文件加载区间和价格数据"""
intervals = []
prices = []
try:
with open(CONFIG_FILE, "r") as f:
for line in f.readlines():
data = list(map(int, line.strip().split()))
if len(intervals) < 1:
intervals = data
else:
prices = data
return intervals, prices
except FileNotFoundError:
print(f"错误:配置文件{CONFIG_FILE}未找到!")
return None, None
except ValueError:
print("错误:配置文件包含非数字内容!")
return None, None
def validate_config(intervals, prices):
"""验证配置数据的有效性"""
if not intervals or not prices:
return False
# 检查区间数是否正确
if len(intervals) != len(prices) + 1:
print("错误:区间数和价格数不匹配!")
return False
# 检查区间是否递增
if any(intervals[i] >= intervals[i+1] for i in range(len(intervals)-1)):
print("错误:区间分割点必须为递增序列!")
return False
# 建议价格递增提示
if any(prices[i] > prices[i+1] for i in range(len(prices)-1)):
print("警告:推荐价格设置为递增序列以获得更好效果!")
return True
def calculate_segment_cost(start, end, intervals, prices):
"""计算指定分数区间的费用"""
total_cost = 0.0
current = start
# 找到起始和结束的区间索引
start_idx = next(i for i, val in enumerate(intervals) if val > start) - 1
end_idx = next(i for i, val in enumerate(intervals) if val >= end) - 1
# 处理起始部分区间
if start < intervals[start_idx + 1]:
segment_end = min(intervals[start_idx + 1], end)
ratio = (segment_end - start) / (intervals[start_idx + 1] - intervals[start_idx])
cost = ratio * prices[start_idx]
total_cost += cost
print(f"[分段计费] {start}-{segment_end} ({ratio:.2%}): ¥{cost:.2f}")
current = segment_end
start_idx += 1
# 处理完整区间
while start_idx <= end_idx and current < end:
segment_end = min(intervals[start_idx + 1], end)
if segment_end == intervals[start_idx + 1]:
cost = prices[start_idx]
else:
ratio = (segment_end - current) / (intervals[start_idx + 1] - intervals[start_idx])
cost = ratio * prices[start_idx]
total_cost += cost
print(f"[分段计费] {current}-{segment_end} ({ratio if segment_end < intervals[start_idx + 1] else '100.00%'}): ¥{cost:.2f}")
current = segment_end
start_idx += 1
return total_cost
def get_valid_input(prompt, min_val, max_val):
"""获取有效数字输入"""
while True:
try:
value = int(input(prompt))
if min_val <= value <= max_val:
return value
print(f"输入必须在{min_val}-{max_val}之间!")
except ValueError:
print("请输入有效的整数!")
def main():
"""主程序逻辑"""
print("价格计算器 - yanchang 开发")
print("📮287829485@qq.com")
print("退出程序请使用 CTRL+C\n")
# 加载配置
intervals, prices = load_intervals_and_prices()
if not validate_config(intervals, prices):
input("按回车键退出...")
return
print(f"当前区间分段:{intervals}")
print(f"对应区间价格:{prices}\n")
print("输入说明:输入当前分数和目标分数,自动计算总费用")
try:
while True:
print("\n" + "="*40)
current = get_valid_input("请输入当前分数:", intervals[0], intervals[-1])
target = get_valid_input("请输入目标分数:", intervals[0], intervals[-1])
if current >= target:
print("目标分数必须大于当前分数!")
continue
total = calculate_segment_cost(current, target, intervals, prices)
print(f"\n总费用:¥{total:.2f}")
except KeyboardInterrupt:
print("\n程序已退出")
if __name__ == "__main__":
main()python关于配置文件
4500 5500 6500 7500 8500 9500
200 300 400 500 600运行截图

打包好的exe文件当附件了价格计算器.zip