Pythonで逆ポーランド記法の式を計算するプログラム

逆ポーランド記法は、数式の演算子が数値の後に来るように表記される数式表記方法です。この表記方法は、式の計算順序を括弧などの区切り文字を使わずに表現でき、計算機による演算処理に適しています。

ポーランド記法とは

逆ポーランド記法は、数式を表すための一種の記法であり、演算子オペランド(数字や変数などの値)の後に来る形式で表現されます。通常の中置記法(例えば、2 + 3)とは異なり、逆ポーランド記法では、演算子が前置記法(例えば、+ 2 3)や後置記法(例えば、2 3 +)の形式で表現されます。

pydocument.hatenablog.com

逆ポーランド記法は、以下のような手順で式を解析します。

  1. 式を左から右に読みます。
  2. 読んだトークン(演算子またはオペランド)をスタックにプッシュします。
  3. 次に読んだトークンが演算子である場合、スタックから必要な数のオペランドをポップして演算を行い、結果をスタックにプッシュします。
  4. 式の最後までトークンを読み、スタックに最終的な結果が残ります。

例えば、中置記法の式 "3 + 4 * 2 / (1 - 5)2" を逆ポーランド記法に変換すると以下のようになります。

3 4 2 * 1 5 - 2 ^ / +

逆ポーランド記法の式を計算するプログラム

Python逆ポーランド記法の式を計算するプログラムを作成するには、以下の手順に従います。

  1. 逆ポーランド記法の式を入力する
  2. 入力された式をスタックに格納する
  3. スタックから要素を取り出し、演算子であれば、適切な演算処理を行い、結果をスタックに追加する
  4. スタックに1つだけ要素が残った場合、それが計算結果となる

以下は、Python逆ポーランド記法の式を計算するプログラムのサンプルコードです。

def evaluate(expression):
    stack = []
    for element in expression.split():
        if element.isdigit():
            stack.append(int(element))
        else:
            num2 = stack.pop()
            num1 = stack.pop()
            if element == '+':
                stack.append(num1 + num2)
            elif element == '-':
                stack.append(num1 - num2)
            elif element == '*':
                stack.append(num1 * num2)
            elif element == '/':
                stack.append(num1 / num2)
    return stack.pop()

このコードでは、引数として与えられた逆ポーランド記法の式をスペースで分割し、各要素を順に処理します。要素が数字であれば、そのままスタックに追加します。要素が演算子であれば、スタックから2つの要素を取り出し、適切な演算処理を行い、結果をスタックに追加します。

演算子の処理には、if文を用いて、演算子ごとに適切な処理を行うようにしています。

例えば、以下のような逆ポーランド記法の式を引数として与えると、計算結果として6が返されます。

evaluate('3 2 + 1 -')

この式は、3+2-1=4という数式と等価です。

以上が、Python逆ポーランド記法の式を計算するプログラムのサンプルコードとなります。これらのプログラムはPythonの基本的な文法で実装することができます。Pythonの基礎学習には下記のようなサイトの利用が有効です。

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com