对于我正在编写的该程序,我正在编写一个需要简化和读取/输出布尔表达式的程序。为此,我需要能够在以下代码之间进行转换:
AND(OR(a,b), NOT(OR(c,a)))
进入
(A+B).'(C+A)
反之亦然,所有运算符都以AND(a,b)
,OR(a,b)
和NOT(a)
的形式工作,其中a和b是变量/参数(它们代表程序中的实际功能)。 / p>
我不知道该如何处理,因此,如果您有什么可以指导我的,我将非常感激。
谢谢。
答案 0 :(得分:0)
因此,撇开评估给定布尔表达式的问题,您最终将拥有一种采用特定格式的代码字符串,并且希望将其重新格式化为其他类型的字符串。从第一种格式更改为第二种格式的一种方法是在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模块中查找“ *+*
”之类的东西。