所以我正在尝试创建一个类似于集合理论计算器的Python应用程序(即两个集合,交集,补集等)。我希望有一个文本字段,在执行时,像Python表达式一样进行评估,使用大括号并将其全部转换为集合。计算新集时,结果将打印在屏幕上。但是,我想确保用户不会输入任何可能会破坏整个应用程序(或更糟糕的系统)的Python命令,无论是否有意。他应该只能输入以下内容;
为了给你一个想法,这就是输入和输出应该是什么样的(这个应用程序将使用GUI,我只是为了方便而使用终端样式):
>>> {1, 2, a} - {a}
{1, 2}
任何提示?或者我应该实现一种迷你语言,我将其变成Python命令?
答案 0 :(得分:1)
Compile表达式,然后walk the resultant AST验证它只包含您明确要允许的操作。 然后 evaluate它。
答案 1 :(得分:0)
我会使用你可以翻译成python命令的迷你语言。
如果要使用{}表示法表示集合,则只需确保括号中包含的每个非数字值都被视为字符串(以避免安全风险)。嵌套括号将被实例化为冻结集,因为集合是不可删除的,不能嵌套。
解析集之间的操作数可能应限于:
s <= t test whether every element in s is in t
s >= t test whether every element in t is in s
s | t new set with elements from both s and t
s & t new set with elements common to s and t
s - t new set with elements in s but not in t
s ^ t new set with elements in either s or t but not both