Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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
z3python:将字符串转换为表达式_Python_Z3 - Fatal编程技术网

z3python:将字符串转换为表达式

z3python:将字符串转换为表达式,python,z3,Python,Z3,考虑到x,y,z=Ints('xyz')和一个类似s='x+y+2*z=5'的字符串,有没有快速的方法将s转换为z3表达式?如果这是不可能的,那么我似乎要做很多字符串操作来进行转换 您可以使用Pythoneval函数。以下是一个例子: from z3 import * x,y,z = Ints('x y z') s = 'x + y + 2*z == 5' F = eval(s) solve(F) 此脚本在我的计算机上显示[y=0,z=0,x=5] 不幸的是,我们无法同时执行此脚本。rise

考虑到
x,y,z=Ints('xyz')
和一个类似
s='x+y+2*z=5'
的字符串,有没有快速的方法将s转换为z3表达式?如果这是不可能的,那么我似乎要做很多字符串操作来进行转换

您可以使用Python
eval
函数。以下是一个例子:

from z3 import *
x,y,z = Ints('x y z') 
s = 'x + y + 2*z == 5'
F = eval(s)
solve(F)
此脚本在我的计算机上显示
[y=0,z=0,x=5]


不幸的是,我们无法同时执行此脚本。rise4fun网站拒绝包含
eval
(出于安全原因)的Python脚本。

更进一步,如果我没有提前声明
x,y,z
,我将如何自动声明
x,y,z
?假设我知道
'x+y+2*z==5'
中的所有变量都是
Int
类型。我能够使用
exec
实现变量声明,例如
exec(“x,y,z=Ints('x y z')”)
。我想知道是否有更好的办法
exec/eval
在PythonYes中是危险的操作,
eval
非常危险。Z3API只有SMT2.0、SMT1.0和Z3内部格式的解析器。但是,这些格式都不是用户友好的。例如,SMT格式使用s表达式而不是更自然的中缀符号。您可以尝试Python中可用的许多解析器生成器之一。它们会给你最大的灵活性。见本文: