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
相关产品推荐
相关产品推荐

