python中的函数+开关

2024-09-28 01:24:03 发布

您现在位置: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)

我知道我犯了个错误,但不知道怎么解决。 提前谢谢


Tags: 函数inforreturnifdef错误range
2条回答

函数fcostoproduccion有几点:

  1. 它总是返回None
  2. 它没有副作用
  3. 它只使用传递给它的第一个参数(即,函数中的参数periodo是不受支持的)

很难看出你的意图与功能,但我猜

  1. 您想基于X计算一个值
  2. 计算期望返回值的公式因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]

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

return switcher[X]

请注意,您只希望在X > 1时返回它。因此,请确保缩进return语句,并根据需要处理else大小写

注意,在这种情况下,你的第二个论点似乎毫无用处。因此,您可能需要删除periodo

相关问题 更多 >

    热门问题