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

PythonでS式を文字列として評価するプログラム


S式として文字列sがあるとします。そのS式を評価し、結果を整数として返す必要があります。 s式は、1つの数値、または(+(-3 2)(* 3 3))のような括弧で囲まれた再帰式のいずれかであることがわかっているため、(3 -2)+(3 * 3)=10。ここで有効な演算子は+、-、*、および/です。

したがって、入力がs ="(-(+ 3 2)2)"の場合、出力は((3 + 2)-2)=3のように3になります。

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

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

  • sの開き括弧と閉じ括弧を削除します

  • a:=スペースを使用してsを分割し、パーティションのリストを作成します

  • 逆の順序で各iについて、実行します

    • サイズがi>1の場合、

      • i [0]が「-」と同じ場合、

        • iを整数としてスタックにプッシュします

        • 次のイテレーションに行く

      • それ以外の場合

        • iを整数としてスタックにプッシュします

    • それ以外の場合、iが数字の場合、

      • iを整数としてスタックにプッシュします

    • それ以外の場合

      • スタックのサイズが2より大きい場合、

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

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

        • iが「+」と同じ場合、

          • num1 + num2を実行し、スタックにプッシュします

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

          • num1-num2を実行し、スタックにプッシュします

        • それ以外の場合、iが「*」と同じ場合は

          • num1 * num2を実行し、スタックにプッシュします

        • それ以外の場合

          • num1 / num2を実行し、スタックにプッシュします

  • スタックから一番上の要素を返し、一番上の要素を削除します

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

class Solution:
   def solve(self, s):
      stack = list()
      s = s.replace("(", "")
      s = s.replace(")", "")
      a = s.split()
      for i in a[::-1]:
         if len(i) > 1:
            if i[0] == "-":
               stack.append(int(i))
               continue
            else:
               stack.append(int(i))
         elif i.isdigit():
            stack.append(int(i))
         else:
            if len(stack) >= 2:
               num1 = stack.pop()
               num2 = stack.pop()
               if i == "+":
                  stack.append(int(num1 + num2))
               elif i == "-":
                  stack.append(int(num1 - num2))
               elif i == "*":
                  stack.append(int(num1 * num2))
               else:
                  stack.append(int(num1 / num2))
      return stack.pop()
ob = Solution()
s = "(- (+ 3 2) 2)"
print(ob.solve(s))
>

入力

s = "(- (+ 3 2) 2)"

出力

3

  1. 16進文字列を10進数に変換するPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 16進文字列が与えられたので、それを10進数に変換する必要があります。 問題を解決するための2つのアプローチがあります- ブルートフォースアプローチ 組み込みモジュールの使用 ブルートフォース方式 ここでは、明示的な型キャスト関数、つまり整数を利用します。この関数は、2つの引数、つまり16進数と同等の引数とベース(16)を取ります。この関数は、16進文字列を整数型の同等の10進数に変換するために使用されます。これは、さらに文字列形式に型キャストして戻すことができます。 例 #input strin

  2. 文字列内のミラー文字を検索するPythonプログラム

    ユーザー入力文字列とその位置からの位置を指定すると、文字をアルファベット順に文字列の長さまでミラーリングする必要があります。この操作では、「a」を「z」に、「b」を「y」に、「c」を「x」に、「d」を「w」に変更します。これは、最初の文字が最後になることを意味します。オン。 Inpu t: p = 3 Input string = python Output : pygslm アルゴリズム Step 1: Input the string and position from we need to mirror the characters. Step 2: Creating a s