用逻辑运算符计算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')