Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将sympy布尔表达式强制转换为sympy整数_Python_Type Conversion_Sympy - Fatal编程技术网

Python 将sympy布尔表达式强制转换为sympy整数

Python 将sympy布尔表达式强制转换为sympy整数,python,type-conversion,sympy,Python,Type Conversion,Sympy,假设我想应用一些布尔逻辑从一些分离的布尔值构建一个整数 在纯python中,我可以这样做 as|u flags=lambda x1,x2,x3,y:x3+2*(x2|y)+4*x1 as#U标志(真、假、真、真)#0b111 但是当我尝试将这个整数作为sympy公式时: x1,x2,x3,y=符号('x1-x2-x3-y') 标志=x3+2*(x2 | y)+4*x1 我得到:TypeError:不支持*:“int”和“Or”的操作数类型 sympy.core.compatibility.a

假设我想应用一些布尔逻辑从一些分离的布尔值构建一个整数

在纯python中,我可以这样做

as|u flags=lambda x1,x2,x3,y:x3+2*(x2|y)+4*x1
as#U标志(真、假、真、真)#0b111
但是当我尝试将这个整数作为
sympy
公式时:

x1,x2,x3,y=符号('x1-x2-x3-y')
标志=x3+2*(x2 | y)+4*x1
我得到:
TypeError:不支持*:“int”和“Or”的操作数类型

sympy.core.compatibility.as_int
在这里似乎也没有帮助

有没有正确的方法进行这种转换


UPD:当然,作为一个麻烦的解决方案,始终有一个选项可以避免SymPy的布尔实现,并重新发明布尔代数的自行车:

从sympy.core导入符号,Mod,Add,Mul
定义或(自身、其他):
返回(自身+其他+自身*其他)%2
定义和(自身、其他):
返回(自身*其他)%2
定义异或(自身、其他):
返回(自身+其他)%2
def_非(自身):
返回(自身+1)%2
类IntegerBoolean(符号):
__或者,或者
__xor_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
对于中的cls(Mod、Add、Mul):
cls.\uuuuu反转\uuuuuuuuu=\uu不
cls.\uuuuuRor\uuuuuuuuuuuuuuuuu=\uuuuuo或
cls.\uuuuu radd\uuuuuuuuuuuuuuuuuuu=\u和
cls.\uuuurxor\uuuuuxor=\uxor
x1,x2,x3,y=[在['x1','x2','x3','y']中t的整数布尔(t)]
标志=x3+2*(x2 | y)+4*x1
打印(标志)
#4*x1+x3+2*Mod(x2*y+x2+y,2)
打印(bin(flags.subs({x1:1,x2:0,x3:1,y:1})))
#0b111

但我希望有一种更合适的方法来处理这个问题。

Symphy选择不象Python那样将布尔值与整数混为一谈。这是Python中的一个错误。