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

2024-04-23 09:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用算术和逻辑运算来计算一个表达式。我真的被输出搞糊涂了。你知道吗

例如:

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

eval('400 >= 0 & 400 >= 0')
True  ==> Right

我在运算符&;之后给出条件的输出。是不是我们不能在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('400.0 >= 0')
True   ==> Right

我很困惑。你知道吗


Tags: inrighttrue表达式evalline运算符算术
2条回答

位逻辑运算符的优先级高于等式。这里没有特定于eval的内容。你知道吗

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

您应该使用or以获得正确的优先级:

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

正如@bruno desthuilliers所提到的,eval不是您应该在用户输入中使用的东西。您可能应该在用户输入和Python操作之间构建自己的映射。如果您真的想构建Python表达式,您可能想看看the ^{} module。你知道吗

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

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

也就是说,eval()是非常不安全的,所以不要将用户输入传递给它。。。你知道吗

相关问题 更多 >