我想计算受特定门槛限制的家庭用水费用: 基本上,阈值如下:
例如,如果一个家庭使用40立方米的水,将收取费用:
(10*10) + (10*20) + (10*30) + (10*40) = $1000
如果一个家庭使用23立方米的水,将收取费用:
(10*10) + (10*20) + (3*30) = $390
我能想到的唯一方法就是使用if-conditionals。我不认为这是计算这个的最好方法。
答案 0 :(得分:2)
你也可以使用字典:
dic = {0:(0,10), 1:(100,20), 2:(300,30), 3:(600,40)}
然后你只需要一次if语句。
def costs(vol):
interval = vol/10 # vol must be positive int
if interval in dic:
price = dic[interval]
return price[0] + price[1]*(vol-price[1] + 10)
else:
return dic[3][0] + dic[3][1]*(vol-dic[3][1] + 10)
您可以使用成本函数是分段线性的这一事实。因此,您必须找出您所处的时间间隔,并将其用作字典的关键字,在此处您可以节省每个间隔开始时的成本以及成本的增加。
答案 1 :(得分:0)
首先定义一个列表,该列表将以(difference in volume, price)
格式保存这些限制:
lst = [(10, 10), (10, 20), (10, 30), (None, 40)]
请注意,订单很重要。这里None
代表“无限制”。现在功能:
def get_money(volume):
if volume <= 0:
return 0
total = 0
for diff, price in lst:
if volume == 0:
break
if diff is None:
total += volume * price
volume = 0
elif volume > diff:
total += diff * price
volume -= diff
else:
total += volume * price
volume = 0
return total
BTW:如果不使用if
,就无法解决这个问题。 :)