You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python将数值范围逐步缩小至单个数值

实现逐步缩小数值范围至单个值的可复用方案

核心逻辑

  • 将当前数值范围划分为1-10个均等子范围(支持float类型)
  • 通过输入组号锁定目标子范围,重复该过程直到范围精度满足要求
  • 所有逻辑封装为可复用函数,支持自定义分组数量、精度阈值

代码实现

def split_range(min_val, max_val, num_groups):
    """将指定范围划分为指定数量的子范围,返回子范围列表"""
    if not (1 <= num_groups <= 10):
        raise ValueError("分组数量必须在1-10之间")
    interval = (max_val - min_val) / num_groups
    sub_ranges = []
    for i in range(num_groups):
        start = min_val + i * interval
        # 最后一组直接取到max_val,避免浮点精度误差
        end = start + interval if i != num_groups - 1 else max_val
        sub_ranges.append((start, end))
    return sub_ranges

def narrow_down_range(start_min, start_max, num_groups=2, tolerance=1e-6):
    """交互式逐步缩小范围,直到得到单个数值"""
    current_min, current_max = start_min, start_max
    
    while abs(current_max - current_min) > tolerance:
        print(f"\n当前范围: [{current_min:.4f}, {current_max:.4f}]")
        try:
            # 生成子范围
            groups = split_range(current_min, current_max, num_groups)
            # 打印分组信息
            for idx, (s, e) in enumerate(groups, 1):
                print(f"组 {idx}: [{s:.4f}, {e:.4f}]")
            # 获取用户输入
            choice = int(input(f"请输入目标所在的组号(1-{num_groups}): "))
            if not (1 <= choice <= num_groups):
                print(f"无效输入,请输入1-{num_groups}之间的数字")
                continue
            # 更新当前范围
            current_min, current_max = groups[choice - 1]
        except ValueError as e:
            print(f"错误: {e}")
            continue
    
    # 取范围中点作为最终值
    final_value = (current_min + current_max) / 2
    print(f"\n最终确定数值: {final_value:.6f}")
    return final_value

使用示例

示例1:2组分组,从1到110开始缩小

# 调用函数,默认2组分组,精度阈值1e-6
narrow_down_range(1, 110)

示例2:自定义分组数量与精度

# 用5组分组,从0.2到100000开始,精度阈值设为0.01
narrow_down_range(0.2, 100000, num_groups=5, tolerance=0.01)

扩展说明

  • 分组数量调整:调用narrow_down_range时修改num_groups参数,取值范围1-10
  • 精度控制:修改tolerance参数,当当前范围的差值小于该值时停止循环
  • 浮点支持:直接传入float类型的起始范围即可,函数会自动处理浮点运算
  • 避免一次性计算:每次仅根据当前范围生成子分组,无需提前计算所有可能路径

内容的提问来源于stack exchange,提问作者steven-14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:05:24