用逻辑运算符计算python表达式

用逻辑运算符计算python表达式,python,Python,我试图用算术和逻辑运算来计算一个表达式。我真的对输出感到困惑 例如: eval('100 >= 1000 & 100 >= 95') True ==> Wrong eval('400 >= 0 & 400 >= 0') True ==> Right I在&运算符之后给出条件的输出。是不是我们不能在eval中使用逻辑运算 eval('400 >= 5000 | 400 >= 0') False ==> Wro

我试图用算术和逻辑运算来计算一个表达式。我真的对输出感到困惑

例如:

eval('100 >= 1000 & 100 >= 95')
True   ==> Wrong   

eval('400 >= 0 & 400 >= 0')
True  ==> Right
I在&运算符之后给出条件的输出。是不是我们不能在eval中使用逻辑运算

eval('400 >= 5000 | 400 >= 0')
False   ==> Wrong
使用OR运算符,它会给我不同的输出

当我尝试在表达式中使用浮点值时,它抛出TypeError

eval('400.0 >= 0 & 400.0 >= 0')


Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    eval('400.0 >= 0 & 400.0 >= 0')
  File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'int' and 'float'

这里很混乱。

按位逻辑运算符的优先级高于相等值。这里没有特定于
eval
的内容

>>> eval('(400 >= 5000) | (400 >= 0)')
True
您应该使用
,以获得正确的优先级:

>>> eval('400 >= 5000 or 400 >= 0')
True

正如@bruno desthuilliers所提到的,
eval
不应该用于用户输入。您可能应该在用户输入和Python操作之间构建自己的映射。如果您真的想构建Python表达式,您可能需要看一看。

Python逻辑运算符被命名为
-
&
是位运算符。所以你想要:

eval('400 >= 5000 or 400 >= 0')

这就是说,
eval()
非常不安全,所以不要将用户输入传递给它

我想知道你为什么要使用
|
&
我需要计算这样的表达式<代码>aa>=1000和bb>=95
。我将aa和bb的值代入计算使用
&
不是布尔运算符,它们是按位的。这是对实际问题的回答,但不是对问题的回答:)@Elazar确实-我认为解决根本问题会更有帮助
eval('400 >= 5000 or 400 >= 0')