【发布时间】:2015-10-18 00:27:44
【问题描述】:
我目前正在尝试编写一个函数,该函数将两个真值函数作为其参数,并根据它们在逻辑上是否等效返回一个布尔值。例如,假设主要功能是
def logical_equiv(function1, function2):
#function1 and function2 are truth functions
我已经通过做检查了两个传入的函数是否相同
def logical_equiv(function1, function2):
if function1 == function2:
return True
但是如何检查function1和function2的实际返回值呢?更清楚地说,假设 function1 接受两个参数 P 和 Q,然后返回(非 P)或(非 Q),而 function2 也接受两个参数 P 和 Q,然后返回 not(P 和 Q),我将如何在我的逻辑等效函数?我试过做
def logical_equiv(function1, function2):
if function1 == (not P) or (not Q):
#do something
但这会返回错误NameError: name 'P' is not defined
从logical_equiv打印出函数返回一个内存地址。
【问题讨论】:
-
向我们展示“真实”代码和您遇到的错误。你不能说
if function1 == function2:,因为你正在比较对象引用,所以这通常是错误的。您需要查看函数的参数数量,并且它们必须始终相同。然后你需要构造一个真值表(即输入和预期输出的布尔值数组),然后用一组布尔值调用每个函数并比较它们都返回相同的布尔值。 -
我同意@dopstar...很难理解您为什么要查看
function1和function2的内部代码,因此编辑您的帖子以包含您的具体问题会有所帮助.我知道 SO 是关于泛化的,但在这种情况下,我们需要看看。
标签: python python-3.x logic