Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのブール式の解析


ブール式があるとすると、その式を評価した後で結果を見つける必要があります。

式は次のいずれかになります-

  • 「t」、Trueと評価;

  • 「f」、Falseと評価;

  • 「!(式)」、内部式の論理否定に評価します;

  • "&(expr1、expr2、...)"、2つ以上の内部式の論理ANDに評価;

  • "|(expr1、expr2、...)"、2つ以上の内部式の論理和に評価;

したがって、入力が「|(!(t)、&(t、f、t))」のような場合、出力は簡単になります。これは、!(t)がfalseであるため、&(t、f、 t)もfalseであるため、すべてのfalse値のORはfalseになります。

これを解決するには、次の手順に従います-

  • 定義solve()、これはe、iを取ります

  • e[i]が"f"と同じ場合、-

    • return(False、i + 1)

  • それ以外の場合、e[i]が"t"-

    と同じ場合
  • return(True、i + 1)

  • op:=e [i]、i:=i + 2

  • 1つのスタックを定義する

  • e [i]が括弧を閉じていない間は、-

    を実行します。
    • e [i]が「、」と同じ場合、-

      • i:=i + 1

      • 次の部分を無視し、次の反復にスキップします

    • res、i:=resolve(e、i)

    • 解像度をスタックにプッシュする

  • opが「&」と同じ場合、-

    • スタック内のすべての要素がtrueの場合はtrueを返し、それ以外の場合はfalseを返します。i+ 1

  • それ以外の場合、opが「OR」と同じ場合-

    • スタック内の少なくとも1つの要素がtrueの場合はtrueを返し、それ以外の場合はfalseを返します。i+ 1

  • return(stack [0]の逆、i + 1)

  • メインの方法から、次のようにします-

  • s、y:=resolve(expression、0)

  • sを返す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def parseBoolExpr(self, expression):
      s,y = self.solve(expression,0)
      return s
   def solve(self,e,i):
      if e[i] =="f":
         return False,i+1
      elif e[i] == "t":
         return True,i+1
      op = e[i]
      i = i+2
      stack = []
      while e[i]!=")":
         if e[i] == ",":
            i+=1
            continue
         res,i = self.solve(e,i)
         stack.append(res)
      if op == "&":
         return all(stack),i+1
      elif op == "|":
         return any(stack),i+1
      return not stack[0],i+1
ob = Solution()
print(ob.parseBoolExpr("|(!(t),&(t,f,t))"))

入力

"|(!(t),&(t,f,t))"

出力

False

  1. PythonでのXML解析?

    Python XMLパーサーパーサーは、XMLファイルから有用な情報を読み取って抽出する最も簡単な方法の1つを提供します。この短いチュートリアルでは、Python ElementTree XML APIを使用してXMLファイルを解析し、XMLドキュメントを変更および作成する方法を説明します。 Python ElementTree APIは、XMLデータを抽出、解析、変換する最も簡単な方法の1つです。 それでは、ElementTreeを使用してPythonXMLパーサーの使用を開始しましょう。 例1 XMLファイルの作成 まず、要素とサブ要素を含む新しいXMLファイルを作成します。 #Im

  2. Pythonブール演算

    基本的なブール演算はand、or、not 操作。 と 操作-および操作の基本的な構文は次のとおりです。xおよび y。これは、xがfalseの場合は、xを返し、それ以外の場合はyを返すことを示します。 または operation-または操作の基本構文は次のとおりです。xまたは y。これは、xがfalseの場合はyを返し、それ以外の場合はxを返すことを示します。 ない operation-および操作の基本構文は次のとおりです。not バツ。 xがfalseの場合はtrueを返し、そうでない場合はfalseを返すことを示します。 サンプルコード x = 25 y =