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

Pythonの文字列からブール式を評価するプログラム?


演算子「and」と「or」を含むブール式を含む文字列sがあるとします。それを評価して、結果を返します。ここでは、式に括弧が含まれている場合があります。これを最初に評価する必要があります。

したがって、入力がs ="T and(F or T)"のような場合、出力はTrueになります

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

  • スタック:=新しいリスト

  • t=空白で分割されたsの要素のリスト

  • tのvごとに、実行します

    • v[0]が"("と同じ場合、

      • v ["("のインデックスから終了]が "T"と同じ場合、スタックにtrueをプッシュします

    • それ以外の場合、「)」が見つかった場合は

      • ct:=v

        の閉じ括弧")"の数
      • v[インデックス0からv-ctのサイズまで]がスタックへの「T」と同じである場合にtrueをプッシュします

      • 0からct-1の範囲の値ごとに、実行

        • 右:=スタックからポップ

  • :=スタックからポップ

    • 左:=スタックからポップ

    • 操作(左または右)を実行し、スタックにプッシュします

    • それ以外の場合、vが「T」または「F」の場合

      • vが「T」と同じ場合にtrueをスタックにプッシュします

    • それ以外の場合

      • op[v]をスタックにプッシュ

  • スタック内の要素数が1より大きい場合、

    • 0からスタックのサイズまでの範囲のiの場合-1、2ずつ増やします

      • stack [i + 2]:=stack [i + 1](stack [i]、stack [i + 2])

    • スタックの最上位要素を返す

  • スタックの一番下の要素を返す

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

class Solution:
   def solve(self, s):
      stack = []
      op = {
         "or": lambda x, y: x or y,
         "and": lambda x, y: x and y,
      }
      for v in s.split():
         if v[0] == "(":
            stack.append(v[v.count("(") :] == "T")
         elif v.count(")") > 0:
            ct = v.count(")")
            stack.append(v[:-ct] == "T")
            for _ in range(ct):
               right = stack.pop()
               o = stack.pop()
               left = stack.pop()
               stack.append(o(left, right))
         elif v in ["T", "F"]:
            stack.append(v == "T")
         else:
            stack.append(op[v])

      if len(stack) > 1:
         for i in range(0, len(stack) - 1, 2):
            stack[i + 2] = stack[i + 1](stack[i], stack[i + 2])
         return stack[-1]

      return stack[0]

ob = Solution()
s = "T and (F or T)"
print(ob.solve(s))

入力

"T and (F or T)"

出力

True

  1. 文字列からn番目の文字を削除するためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 −文字列が与えられたので、与えられた文字列からi番目のインデックス付き文字を削除して表示する必要があります。 Pythonのどの文字列でも、インデックス付けは常に0から始まります。文字列「tutorialspoint」があるとすると、そのインデックス付けは次のように行われます- T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 次に、ステートメントを解決するためのPythonスクリプトを見てみましょう- 例 def remove

  2. 文字列からn番目の文字を削除するためのPythonプログラム?

    文字列は文字の配列を意味するため、開始アドレスは0です。そうすれば、すべての文字のインデックスを簡単に取得できます。そのインデックス番号を入力する必要があります。次に、その要素を削除します。したがって、文字列を2つのサブ文字列に分割します。また、2つの部分は、n番目のインデックス付き文字の前と、インデックス付き文字の後の2つの部分で、この2つの文字列をマージする必要があります。 例 Input: python n-th indexed: 3 Output: pyton 説明 アルゴリズム Step 1: Input a string. Step 2: input the index p