ホームページ > バックエンド開発 > Python チュートリアル > Python 正規表現を使用して逆ポーランド語式を評価する方法

Python 正規表現を使用して逆ポーランド語式を評価する方法

PHPz
リリース: 2023-06-23 09:48:14
オリジナル
1677 人が閲覧しました

逆ポーランド語表現とは何ですか?

逆ポーランド式は後置式とも呼ばれ、演算子の優先順位を区別するために括弧を必要としない算術式を表現する方法です。その特徴は、演算子がオペランドの後ろにあることです。たとえば、中置表現「3 4 5」を逆ポーランド語表現に変換すると、「3 4 5 」となります。

Python 正規表現とは何ですか?

Python 正規表現は、テキスト データを照合および処理するためのツールです。正規表現を使用して、テキスト内のパターンを検索できます。 Python には、正規表現機能を使用するための「re」モジュールが用意されています。

逆ポーランド式評価に Python 正規表現を使用するにはどうすればよいですか?

逆ポーランド式評価アルゴリズムを実装するには、次の手順に従う必要があります:

  1. 逆ポーランド式をリストに変換して、各演算子とオペランドを順番にチェックできるようにします。
  2. 空のスタックを作成します;
  3. 逆ポーランド式の変換されたリストを調べて、各要素に対して次の操作を実行します:
    a. これが数値の場合は、スタックの先頭にプッシュします。
    b. これが演算子の場合、スタックの先頭にある 2 つの要素をポップして対応する操作を実行し、その結果をスタックの先頭にプッシュします;
  4. トラバーサルが完了すると、スタックの最上位の要素は、逆ポーランド式の評価結果です。

Python 正規表現を使用すると、逆ポーランド語表現をリストに変換する機能を簡単に実装できます。サンプル コードは次のとおりです。

import re

expression = "3 4 5 * +"
tokens = re.findall("d+|S", expression)

print(tokens) # ['3', '4', '5', '*', '+']
ログイン後にコピー

次に、上記の手順に従って、逆ポーランド式の評価アルゴリズムを実装します。サンプル コードは次のとおりです。

stack = []
for token in tokens:
    if re.match("d+", token):
        stack.append(int(token))
    else:
        operand2 = stack.pop()
        operand1 = stack.pop()
        if token == "+":
            stack.append(operand1 + operand2)
        elif token == "-":
            stack.append(operand1 - operand2)
        elif token == "*":
            stack.append(operand1 * operand2)
        elif token == "/":
            stack.append(int(operand1 / operand2))

result = stack.pop()

print(result) # 23
ログイン後にコピー

このコードは、空のスタックを作成し、逆ポーランド式リストを反復処理し、各演算子とオペランドをチェックし、スタック上で対応する操作を実行し、最後に要素を返します。結果としてスタックの最上位になります。

結論

Python 正規表現を使用すると、逆ポーランド式をリストに簡単に変換し、スタック上で算術計算を実行できます。 Python の正規表現は非常に強力で、高速、柔軟、信頼性の高いテキストの一致と処理を実現するのに役立ちます。

以上がPython 正規表現を使用して逆ポーランド語式を評価する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート