假设我以X价格购买一定数量的汽油,通常在30天内售出。在这30天里,我需要根据国家汽油的平均价格来调整我的加油站汽油价格。如果国价比我的购买价格上涨1.2%,我将把我的价格定在我购买价格的1%。
这里有一个python代码,但是它非常笨重,如果油价上涨了20%,那么我必须编写my_priceX多达20次。有没有更优雅的解决方案?
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)
发布于 2022-06-30 16:18:59
在乘法器上使用循环:
for multiplier in (1.01, 1.02, 1.03, 1.04, 1.05):
if last_gas_price > last_gas_price["price"]*multiplier:
adj_price(price=last_gas_price["price"]*multiplier)
使用3.8+海象算子,如果您真正关心的话,您可以避免重做乘法:
for multiplier in (1.01, 1.02, 1.03, 1.04, 1.05):
if last_gas_price > (myprice := last_gas_price["price"]*multiplier):
adj_price(price=myprice)
如果您只需要运行adj_price
一次,对于最高的传递乘数,则在命中时反向运行循环并运行break
:
for multiplier in (1.05, 1.04, 1.03, 1.02, 1.01): # Reversed multipliers
if last_gas_price > (myprice := last_gas_price["price"]*multiplier):
adj_price(price=myprice)
break # Found highest passing multiplier and adjusted, now we're done
注意:您提供的代码显然是错误的(last_gas_price
最初是一个dict
,然后显然是标量,之后可能是float
)。这个新代码复制了这个错误。您需要适当地调整用于将dict
用法与非dict
用法分开的变量名。
发布于 2022-06-30 16:20:58
好的,正如我所看到的,这种情况是非常混乱的,而且如果每个my_prize都是递增的,那么使用一个for循环,所以当奖励增加时,按原样设置它。
https://stackoverflow.com/questions/72818991
复制相似问题