什么是计算受阈值约束的成本的有效方法

2024-05-17 20:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算受某些阈值限制的家庭的水费成本: 基本上阈值如下:

  • 对于第一个0-10立方米,将花费10美元
  • 对于随后的11-20 m3,将花费20美元
  • 对于随后的21-30 m3,将花费30美元
  • 对于随后的>;30 m3,将花费40美元

例如,如果一个家庭使用40立方米的水,将收取以下费用:

(10*10) + (10*20) + (10*30) + (10*40) = $1000

如果一个家庭使用23立方米的水,将收取:

(10*10) + (10*20) + (3*30) = $390

我能想到的唯一方法就是使用if条件句。我不认为这是最好的计算方法。你知道吗


Tags: 方法gtif家庭阈值m3费用成本
2条回答

首先定义一个以(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

顺便说一句:不使用if就无法解决这个问题。:)

你也可以使用字典:

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)

你可以利用成本函数是分段线性的这一事实。因此,你必须找出你所处的时间间隔,并把它作为你的字典的关键,在这里你可以节省每个时间间隔开始时的成本以及成本的增加。你知道吗

相关问题 更多 >