0

私が書いているこのプログラムでは、ブール式を単純化して読み取り/出力する必要があるプログラムを書いています。これを行うには、次のようなコード間で変換できる必要があります。

AND(OR(a,b), NOT(OR(c,a)))

の中へ

(A+B).'(C+A)

aとb は変数/パラメーターです (これらは私のプログラムの実際の関数を表しますAND(a,b)) 。OR(a,b)NOT(a)

これにどうアプローチしたらいいのかわからないので、何かご案内できることがあれば、よろしくお願いします。

ありがとうございました。

4

1 に答える 1

0

したがって、特定のブール式を評価する問題はさておき、最終的にはある特定の形式のコードの文字列があり、それを別の型の文字列に再フォーマットする必要があります。最初の形式から 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モジュールに関するアルゴリズムを調べることができます。

于 2019-03-26T23:15:28.350 に答える