多个IF语句在Python中for循环或while循环?



假设我以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的增加,设置它为它。

相关内容

  • 没有找到相关文章

最新更新