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表达式?如果这是不可能的,那么我似乎要做很多字符串操作来进行转换 您可以使用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]
不幸的是,我们无法同时执行此脚本。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中可用的许多解析器生成器之一。它们会给你最大的灵活性。见本文: