如何在python中使用非逻辑操作

时间:2015-03-03 10:36:06

标签: python

输入逻辑表达式作为字符串并进行评估,我得到正确的输出

str1 = "(1|0)&(1|1&(0|1))"
print eval(str1)
o/p: 1

但同样地,如果我不包括运算符〜,则输出错误。

str1 = "(~0|~1)&(~1|0)"
print eval(str1)
o/p: -2

有没有其他方法可以代表非操作员来获得正确答案。

3 个答案:

答案 0 :(得分:1)

这些不是逻辑表达式,而是按位表达式。这就是~0 == -1的原因。相反,您可以查找以您希望的方式解析这些表达式的解析器。快速谷歌搜索显示this stackoverflow question。 Sympy似乎实现了类似的事情:sympy logic

  

SymPy的逻辑模块允许使用符号和布尔值来形成和操作逻辑表达式

答案 1 :(得分:0)

&|~是按位运算符。

对于逻辑运营商,请使用andornot

如果您打算进行逻辑操作,请选择使用适当的布尔值:

True / False

答案 2 :(得分:0)

str1 = "(not 0|not 1) and (not 1|0)"
print eval(str1)

在python中,NOT是not

参考:https://docs.python.org/2/library/stdtypes.html