Таким образом, оставляя в стороне проблему оценки заданного логического выражения, вы в конечном итоге получаете строку кода в одном конкретном формате, и вы хотите переформатировать ее в строку другого типа. Один из способов перейти от первого формата ко второму - сделать фактические функции в Python именуемыми «И», «ИЛИ» и «НЕ» (три слова, которые не имеют других специальных значений в 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 module.