yanchang
yanchang
发布于 2025-04-11 / 24 阅读
0
0

王者荣耀代练价格计算器

齐旭要用这玩意帮他开发一个

源码贴在这里了

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


评论