Python如何用for/while循环替代多IF语句实现油价动态调整
问题描述
- 业务规则:以价格X采购汽油,常规30天内售罄,销售周期内需根据全州平均汽油价格动态调整本站售价:当全州平均油价较采购价上涨1.2%时,将本站售价设置为采购价上浮1%的档位,后续档位按相同规则依次递增,最高需覆盖20%涨幅场景。
- 现存痛点:当前手写的Python实现冗余度极高,若要覆盖20%涨幅,需要手动定义20组价格变量、编写20组独立if判断语句,代码臃肿难维护,需要通过循环逻辑替换重复的多分支判断,实现更简洁的代码结构。
现有冗余代码
my_price1 = last_gas_price["price"]*1.01 my_price2 = last_gas_price["price"]*1.02 my_price3 = last_gas_price["price"]*1.03 my_price4 = last_gas_price["price"]*1.04 my_price5 = last_gas_price["price"]*1.05 if last_gas_price > my_price1: adj_price(price = my_price1) if last_gas_price > my_price2: adj_price(price = my_price2) if last_gas_price > my_price3: adj_price(price = my_price3) if last_gas_price > my_price4: adj_price(price = my_price4) if last_gas_price > my_price5: adj_price(price = my_price5)
注:原代码存在变量命名歧义,下述优化逻辑中统一用purchase_price指代采购价,state_avg_price指代实时全州平均油价
优化方案
循环实现(逻辑完全对齐原有写法)
核心思路是不需要提前手动定义所有档位的价格变量,直接在循环中逐档计算触发阈值和对应售价,从低到高判断后自动匹配最高符合条件的档位,支持任意配置最高涨幅,不需要修改核心判断逻辑:
# 可根据业务需求自由调整配置参数 purchase_price = last_gas_price["price"] max_markup_level = 20 # 最高覆盖20%涨幅档位 station_price_step = 0.01 # 本站售价每档较采购价上浮1% state_trigger_step = 0.012 # 全州均价每上涨1.2%触发一次升档 final_price = purchase_price # 逐档遍历判断 for level in range(1, max_markup_level + 1): trigger_threshold = purchase_price * (1 + level * state_trigger_step) level_station_price = purchase_price * (1 + level * station_price_step) if state_avg_price >= trigger_threshold: final_price = level_station_price # 最终执行一次价格调整即可,避免原代码中重复调用函数的问题 adj_price(price=final_price)
如果需要完全复刻原代码逐档触发
adj_price的逻辑,只需将函数调用移至循环内的判断分支中即可,不会改变原有执行结果。
无循环直接计算实现(性能最优)
由于档位是固定步长线性递增,不需要逐档遍历,直接通过涨幅计算命中档位即可,代码更简洁:
purchase_price = last_gas_price["price"] max_level = 20 rise_rate = (state_avg_price - purchase_price) / purchase_price hit_level = min(int(rise_rate // 0.012), max_level) adj_price(price=purchase_price * (1 + hit_level * 0.01))
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

