Pythonで逆ポーランド記法の式を計算するプログラム
逆ポーランド記法(逆ポーランド表記法、後置記法)は、数式の演算子が数値の後に来るように表記される数式表記方法です。この表記方法は、式の計算順序を括弧などの区切り文字を使わずに表現できます。そのため、計算機上で数式を効率的に処理することに適しており、主に計算機科学や数学の分野で使われています。
ポーランド記法とは
逆ポーランド記法は、数式を表すための一種の記法であり、演算子がオペランド(数字や変数などの値)の後に来る形式で表現されます。通常の中置記法(例えば、2 + 3)とは異なり、逆ポーランド記法では、演算子が前置記法(例えば、+ 2 3)や後置記法(例えば、2 3 +)の形式で表現されます。
逆ポーランド記法の計算手順
逆ポーランド記法は、以下のような手順で式を解析します。
- 式を左から右に読みます。
- 読んだトークン(演算子またはオペランド)をスタックにプッシュします。
- 次に読んだトークンが演算子である場合、スタックから必要な数のオペランドをポップして演算を行い、結果をスタックにプッシュします。
- 式の最後までトークンを読み、スタックに最終的な結果が残ります。
例えば、中置記法の式 3 + 4 * 2 / (1 - 5)^2" を逆ポーランド記法に変換すると以下のようになります。
3 4 2 * 1 5 - 2 ^ / +
逆ポーランド記法の式を計算するプログラム
実装する手順の整理
Pythonで逆ポーランド記法の式を計算するプログラムを作成するには、以下の手順に従います。
- 逆ポーランド記法の式を入力する
- 入力された式をスタックに格納する
- スタックから要素を取り出し、演算子であれば、適切な演算処理を行い、結果をスタックに追加する
- スタックに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文を用いて、演算子ごとに適切な処理を行うようにしています。
プログラムの実行
以下のような逆ポーランド記法の式を引数として与えて計算します。この実行では3 2 + 1 -という式を与え、計算結果として4が返されます。この式は、3+2-1=4の計算を同じです。。
evaluate('3 2 + 1 -') # 3+2-1=4
以上が、ポーランド記法を計算するのプログラムの作成とその実行についてです。
最後に IPAのITパスポートや基本情報技術者試験、応用情報技術者試験や数学、情報基礎理論の学習に利用できるUdemy
のサイトを紹介します。ぜひ活用ください。
[PR]