我正在使用Sympy来处理随机生成的表达式,这些表达式可能包含布尔运算符'和','或','而不是'。
'和'和'或'工作得很好:
a = 0
b = 1
a和b
0
a或b
1
但是'not'除了所需的值之外还引入了第二个词'False':
a,而不是b
(0,假)
当Sympy处理时(其中'data'(下面)提供了realworld值来代替变量a和b):
algo_raw ='a,而不是b'
algo_sym = sympy.sympify(algo_raw)
algo_sym.subs(数据)
它窒息'错误'。
我需要禁用第二个词'False',这样我才能获得所需的输出'0'。
答案 0 :(得分:1)
a, not b
并不能按照您的想法行事。您实际上是在要求并正确接收包含以下两项的元组:
a
not b
结果显示,a
为0
,not b
为False
,1
为真,而真正的not
为{ {1}}。
事件False
恰好与您想要的结果相同并不意味着它会为您提供您想要的结果作为元组的第一项并且您只需要扔掉第二个项目!这相当于只写a
。
我想你要做的是将你的条件写为a
。
答案 1 :(得分:0)
如果分别使用运算符&
,|
和~
代替和,或分别使用运算符,则会得到一个符号布尔表达式。我还建议使用sympy.true
和sympy.false
代替1和0。