したがって、特定のブール式を評価する問題はさておき、最終的にはある特定の形式のコードの文字列があり、それを別の型の文字列に再フォーマットする必要があります。最初の形式から 2 番目の形式に変更する 1 つの方法は、"AND"、"OR"、および "NOT" と呼ばれる実際の関数を Python で作成することです (3 つの単語は、Python では他の特別な意味はありません。そのようなキャップ)。次に、各関数を定義して、2 番目の論理形式の出力を出力します。AND("x","y")
たとえば、実行すると、3 文字の文字列 " 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モジュールに関するアルゴリズムを調べることができます。