【问题标题】:How to use not logical operation in python如何在python中使用非逻辑运算
【发布时间】:2015-05-03 23:22:07
【问题描述】:

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

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

但同样的方式,如果我将 not 运算符包含为 ~,则输出会出错。

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

这里有没有其他方式表示非运算符以获得正确答案。

【问题讨论】:

  • python 中的逻辑非为not~ 不是按位。
  • 另外,你为什么eval?不需要证明问题。

标签: python


【解决方案1】:

这些不是逻辑表达式,而是按位表达式。这就是~0 == -1 的原因。相反,您可以寻找一个以您想要的方式解析这些表达式的解析器。一个快速的谷歌搜索出现了this stackoverflow question。 Sympy 似乎实现了类似的东西:sympy logic

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

【讨论】:

    【解决方案2】:
    str1 = "(not 0|not 1) and (not 1|0)"
    print eval(str1)
    

    在python中不是not

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

    【讨论】:

      【解决方案3】:

      &|~ 是位运算符。

      对于逻辑运算符,请使用andornot

      如果您的意图是进行逻辑运算,最好使用适当的布尔值:

      True/False

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-18
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多