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

Python如何优化基于连续pace参数返回对应值的pace_points函数

实现优化方案

基础逻辑版本(固定步长对应固定得分增长)

数学计算极简实现

你当前的逻辑是每降低0.5单位pace,得分固定升高1,直接通过数值计算替代多分支判断,代码更简洁:

def pace_points(pace: float) -> float:
    if pace >= 6.5:
        return 0.5
    if pace < 4.0:
        return 10
    # 计算偏移量:每低0.5 pace得分+1
    offset = int((6.5 - pace) // 0.5)
    return 1 + offset

验证:pace=6.2返回1、pace=5.7返回2、pace=4.3返回5,完全匹配原逻辑

高可维护性实现(适配后续区间调整)

如果后续需要频繁调整区间对应得分,用bisect模块预定义阈值和得分映射,逻辑和配置分离,内聚性更强:

import bisect

def pace_points(pace: float) -> float:
    # 可单独调整的配置项,无需修改核心逻辑
    PACE_THRESHOLDS = [4.0, 4.5, 5.0, 5.5, 6.0, 6.5]
    SCORE_MAPPING = [10, 5, 4, 3, 2, 1, 0.5]
    idx = bisect.bisect_left(PACE_THRESHOLDS, pace)
    return SCORE_MAPPING[idx]

进阶需求版本(支持自定义分布)

将得分计算逻辑抽象为可配置的分布函数,无需修改函数主体即可切换分布规则,比如指数分布实现:

from typing import Callable

def pace_points(
    pace: float,
    base_pace: float = 6.5,
    min_pace: float = 4.0,
    dist_func: Callable[[float], float] = lambda delta: 1 + delta,
    min_score: float = 0.5,
    max_score: float = 10
) -> float:
    if pace >= base_pace:
        return min_score
    if pace < min_pace:
        return max_score
    # delta为比base_pace低的0.5倍步长数
    delta = (base_pace - pace) // 0.5
    # 指数分布示例:lambda delta: 2 ** delta,可根据需求替换
    return dist_func(delta)

如果要使用指数分布,调用时传入对应函数即可:pace_points(5.5, dist_func=lambda d: 2**d)

内容的提问来源于stack exchange,提问作者M.wol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:03