对于我正在编写的这个程序,我正在编写一个需要简化和读取/输出布尔表达式的程序。为此,我需要能够在以下代码之间进行转换:
AND(OR(a,b), NOT(OR(c,a)))
进入
(A+B).'(C+A)
反之亦然,所有运算符都作为AND(a,b)
,OR(a,b)
和工作NOT(a)
,其中 a 和 b 是变量/参数(它们代表我程序中的实际函数)。
我不知道如何处理这个问题,所以如果你能提供任何指导我的东西,我将非常感激。
谢谢你。
对于我正在编写的这个程序,我正在编写一个需要简化和读取/输出布尔表达式的程序。为此,我需要能够在以下代码之间进行转换:
AND(OR(a,b), NOT(OR(c,a)))
进入
(A+B).'(C+A)
反之亦然,所有运算符都作为AND(a,b)
,OR(a,b)
和工作NOT(a)
,其中 a 和 b 是变量/参数(它们代表我程序中的实际函数)。
我不知道如何处理这个问题,所以如果你能提供任何指导我的东西,我将非常感激。
谢谢你。
因此,抛开对给定布尔表达式求值的问题,您最终会得到一个特定格式的代码字符串,并且您希望将其重新格式化为不同类型的字符串。从第一种格式更改为第二种格式的一种方法是在 Python 中创建称为“AND”、“OR”和“NOT”的实际函数(这三个词在 Python 中没有其他特殊含义,当它们全部编写时 -像这样的帽子)。然后定义每个函数以打印第二种逻辑格式的输出。所以运行AND("x","y")
例如返回三个字符的字符串“ x.y
”:
def AND(a,b):
return "(%s.%s)" % (a, b)
def OR(a,b):
return "(%s+%s)" % (a, b)
def NOT(a):
return "'(%s)" % a
a, b, c = "a", "b", "c"
myfirstbool = "AND(OR(a,b), NOT(OR(c,a)))"
mynewbool = eval(myfirstbool) # Take the string, and treat it as Python code
print(mynewbool) # output: ((a+b).'((c+a)))
这可能会给您一些多余的括号,但最终的表达式仍然有效。
走另一条路有点棘手,因为您必须计算嵌套的括号才能使事情正确。您可能想查找有关如何在 Python 中解析嵌套括号、如何*+*
在正则表达式或Sympy模块中找到诸如“”之类的内容的算法。