4

我正在尝试基于(不可预测的)用户输入构建一个布尔表达式。我发现我正在构建一个看起来正确但不起作用的字符串。我查看了 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”和括号,我需要将它们放在适当的位置。

如何进行?

4

2 回答 2

6

将非空字符串解释为bool总是评估为True. IE:

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

这是因为 str 是一个可迭代对象(例如list,setdict)。所有可迭代对象都被认为是True,如果它们是非空的。Astr是一个可迭代的,它迭代它的字符。这很有用,例如,如果您想测试字符串s是否为空。在这种情况下,您可以只写:

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

但是,如果要计算字符串表示的表达式,请调用eval

print eval("False") # False
print eval("0") # 0
print bool(eval("0")) # False
于 2013-06-16T13:54:37.640 回答
0

如果你想评估它在 python 提示符下的评估方式,你可以做eval(stringDing). 如果它是一个逻辑表达式,它将返回一个布尔值。

于 2013-06-16T13:53:03.660 回答