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
的一些事情:
- 总是returns
None
- 没有副作用
- 它只使用传递给它的第一个参数(即函数中未使用参数
periodo
)。
不过我猜很难看出你对函数的意图
- 您想根据
X
计算一个值
- 计算所需 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]
我在 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
的一些事情:
- 总是returns
None
- 没有副作用
- 它只使用传递给它的第一个参数(即函数中未使用参数
periodo
)。
不过我猜很难看出你对函数的意图
- 您想根据
X
计算一个值
- 计算所需 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]