0

所以我正在尝试制作一个类似于集合论计算器的 Python 应用程序(即两个集合的并集、交集、补码等)。我想要一个文本字段,在执行时,它像 Python 表达式一样被评估,带有大括号并且全部变成集合。计算新集合时,结果将打印在屏幕上。但是,我想确保用户不会输入任何可能会搞砸整个应用程序(或更糟;系统)的 Python 命令,无论是否有意。他应该只能输入以下内容;

  • 设置操作(联合、差异、基数等;我将为数学符号提供按钮并使用正则表达式使其在引擎盖下正确)
  • 集合(反过来,它只能包含以下元素;其他集合、元组、整数、实数、字母字符和字符串)。

为了给你一个想法,输入和输出应该是这样的(这个应用程序将带有一个 GUI,为了方便我只是使用终端样式):

>>> {1, 2, a} - {a}
{1, 2}

有小费吗?还是我应该只实现一种迷你语言,然后将其转换为 Python 命令?

4

2 回答 2

1

首先编译表达式,然后遍历生成的 AST以验证它仅包含您明确希望允许的操作。然后 评价一下。

于 2012-09-25T03:48:31.077 回答
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
于 2012-09-25T05:01:34.967 回答