我正在尝试定义一个执行布尔逻辑OR门功能的函数。理想情况下,该函数应接受字典,因为我的数据是字典格式。
我查了不同的东西但我现在卡住了。
我已经从这样的事情开始:
d = {'26': [0.5], '22': [0.5], '12': [0.5]}
def OR_function(**parameters):
pi *= (1 - parameters)
return (1 - pi)
OR_function(**d)
(我知道这是错的)
然后在整天阅读后我设法解压缩字典,但我仍然无法执行递归到位的产品。我已经看过函数式编程操作符,但它们只接受两个参数[https://docs.python.org/3/library/operator.html]。
我目前的功能定义如下所示:
import operator
def OR_function(**parameters):
print(operator.imul(list(*parameters)))
#pi = 0
#for i, j in parameters.items():
# pi *= (1 - j[0])
#print(pi)
return 1 #- pi
并引发以下错误: 'TypeError:op_imul需要2个参数,得到3'
有人能帮助我吗? 欢迎采用其他方式来解决这个问题。请解释答案中的代码,以便我学到一些东西。
答案 0 :(得分:1)
除非我误解你要做什么,否则不需要打开字典。这对我有用:
d = {'26': [0.5], '22': [0.5], '12': [0.5]}
def OR_function(parameters):
pi = 1
print(parameters)
print("=================")
for key, value in parameters.items():
print(pi)
pi *= (1 - value[0])
print("=================")
print(pi)
return (1 - pi)
OR_function(d)
产生此输出(似乎正确):
{'22': [0.5], '12': [0.5], '26': [0.5]}
=================
1
0.5
0.25
=================
0.125
如果字典中的值是包含多个元素的列表,则所需的更改非常小,您只需要一个额外的for循环:
d = {'26': [0.5, 0.7], '22': [0.5, 0.9], '12': [0.5, 0.5]}
def OR_function(parameters):
pi = 1
print(parameters)
print("=================")
for key, value in parameters.items():
for x in value:
print(pi)
pi *= (1 - x)
print(pi)
return (1 - pi)
OR_function(d)
您发布的评论代码:
#pi = 0
#for i, j in parameters.items():
# pi *= (1 - j[0])
#print(pi)
看起来您的问题是您将变量pi
初始化为0,这将在递归乘法中产生值0。