Python或字符串中的布尔表达式?始终返回'True'

时间:2013-06-16 13:43:42

标签: python boolean-expression

我正在尝试基于(不可预测的)用户输入构建布尔表达式。我发现我正在构建一个看起来合适但不起作用的字符串。我看过python.org,Google和Stackoverflow,但在这里找不到什么问题。

代码示例:

    print stringDing
    newVariable = stringDing.replace('False','0')
    print newVariable
    print bool(newVariable)

此输出:

    False or False or False
    0 or 0 or 0
    True

然而,当字符串被粘贴到python中时,python会按预期响应:

    >>> False or False or False
    False

我认为我需要将其构建为一个字符串,因为用户可以添加“OR”,“AND”和括号,我需要在适当的位置加入。

如何进行?

2 个答案:

答案 0 :(得分:5)

将非空字符串解释为bool将始终评估为True。即:

print bool("False") # True
print bool("0") # True

这是因为str是一个可迭代的对象(例如listsetdict)。如果它们非空,则认为所有可迭代对象都是Truestr是一个可迭代的,它遍历其字符。这很有用,例如如果要测试字符串s是否为空。在这种情况下,你可以写:

if s:
  # do something with non-empty string s.

但是,如果您想评估字符串表示的表达式,请调用eval

print eval("False") # False
print eval("0") # 0
print bool(eval("0")) # False

答案 1 :(得分:0)

如果要评估在python提示符下评估它的方式,可以eval(stringDing)。如果它是一个逻辑表达式,它将返回一个bool。