假设我以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)
在乘数符上使用循环:
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
用法的变量名。
好的,这种情况在我看来是相当混乱的,因为if随着my_prize的增加而增加,使用for循环,所以你说随着prize的增加,设置它为它。