python 中的功能 + 切换器

function + swticher in python

我在 python 中使用函数和切换器时遇到问题: 我有这个生产成本函数:

def fcostoproduccion (X,periodo):
if X > 0:
    switcher = {
            1:  200 + 15 * X,
            2:  100 + 20 * X,
            3:  100 + 4 * (X ** (1 / 2)),
            4:  100 + 3 * X,
            5:  150 + 6 * X,
            6:  200 + 12 * (X ** (1 / 2)),
            7:  200 + 15 * X,
            8:  100 + 10 * X,
            9:  100 + 6 * (X ** (1 / 2)),
            10: 200 + 5 * (X ** (1 / 2)),
            11: 100 + 10 * X,
            12: 150 + 6 * X

            }
return

最后我试图寻找价值:

  for l in range(j+1, k+1):
    Ordenar = O[l] 
    Produccion = fcostoproduccion(Demanda, l)

我知道我犯了一个错误,但不知道如何解决。 提前致谢。

如果我理解正确的话,你需要一个好的旧开关盒的行为。不幸的是,python 中没有内置的 switch case。首选方法是使用字典。因此,你真的很亲密。尝试替换您的 return 语句:

return switcher[X]

请注意,只有在 X > 1 时,您才想 return 它。因此,请确保缩进 return 语句并根据需要处理 else 案例。

请注意,您的第二个参数在这种情况下似乎完全没用。所以你可能想删除 periodo.

关于函数 fcostoproduccion 的一些事情:

  1. 总是returns None
  2. 没有副作用
  3. 它只使用传递给它的第一个参数(即函数中未使用参数 periodo)。

不过我猜很难看出你对函数的意图

  1. 您想根据 X
  2. 计算一个值
  3. 计算所需 return 值的公式因 X 的不同值而异,因此字典 switcher.

基于以上假设,可以对函数fcostoproduccion进行如下修改:

def fcostoproduccion(X):
    switcher = {
    1:  200 + 15 * X,
    2:  100 + 20 * X,
    3:  100 + 4 * (X ** (1 / 2)),
    4:  100 + 3 * X,
    5:  150 + 6 * X,
    6:  200 + 12 * (X ** (1 / 2)),
    7:  200 + 15 * X,
    8:  100 + 10 * X,
    9:  100 + 6 * (X ** (1 / 2)),
    10: 200 + 5 * (X ** (1 / 2)),
    11: 100 + 10 * X,
    12: 150 + 6 * X
    }
    return switcher[X] if X in switcher else None #Handle cases where X switcher is not defined for X 

>>> [fcostoproduccion(i) for i in range(14)]
[None, 215, 140, 106.92820323027551, 112, 180, 229.39387691339815, 305, 180, 118.0, 215.81138830084188, 210, 222, None]