四則演算を徹底分析

Mar 26, 2017 pm 04:50 PM
算術

文字列の算術を計算するには?

マッチングに

正規表現を使用する場合、それは少し考えられません。一般的な考え方は再帰を設計することですが、Pythonでは再帰を使用することは強く推奨されません。再帰だけではないためです

深さ制限 (通常は 1000 スタック フレーム) があり、末尾再帰的最適化はサポートされません。

最も簡単な方法は、最初に式を接頭辞式に変換し、次に接頭辞式を通じて結果を計算することです。

接頭辞式 (

演算子の前) はポーランド式とも呼ばれ、対応する接尾辞式 (演算子の後ろ) は逆ポーランド式とも呼ばれます。私たちの生活には、

一般的な大きな式中置式もあります。式は、ほとんどの

プログラミング言語 で使用されます。

中置式を前置式に変換するためのルール:

(1) 2つのスタックを初期化します: 演算子スタックS1と中間結果を格納するスタックS2

(2) 中置式を右から左にスキャンします

(3)オペランドをS2にプッシュする

(4) 演算子に出会ったら、S1スタックの先頭にある演算子の優先度と比較する

: (4-1) S1が先頭の演算子の場合スタックが空であるか、スタックの先頭にある演算子が右括弧 ")" の場合、この演算子はスタックに直接プッシュされます

(4-2) それ以外の場合、優先度がそれより高いか等しい場合スタックの一番上にある演算子の場合、その演算子もスタックにプッシュされます

、それ以外の場合は、S1のスタックの一番上にある演算子をポップしてS2にプッシュします

。再度(4-1)に戻り、S1のスタックの先頭にある新しい演算子と比較します

( 5) 括弧があった場合:

(5-1) 右括弧「)」の場合、 S1 を直接プッシュします

(5-2) 左括弧「(」の場合は、S1 スタックの先頭の操作をシーケンス記号でポップアップし、右括弧に遭遇するまで S2 をプッシュします。

このとき, この括弧のペアを破棄します

(6) 式の左端まで手順(2)~(5)を繰り返します

(7) S1に残っている演算子を1つずつポップしてS2にプッシュします

(8 ) S2 の要素を 1 つずつポップし、結果を中置式に対応する前置式にします。つまり、括弧を削除します。接頭辞式に変換します

def mid_to_prev(expressions: str):
    priority = {  # 运算符的优先级
        "/": 1,
        "//": 1,
        "*": 1,
        "%": 1,
        "+": 0,
        "-": 0,
        "**": 2 }
    expression_list = expressions.split() # 
    number_stack = [] # 数字栈
    symbol_stack = [] # 运算符栈
    for x in expression_list[::-1]:
        if x.isdigit():             
            number_stack.insert(0, x)  # 如果是整数直接存进去
        else:
            if x == '(':         # 如果是 ( 弹出运算符栈中的运算符直到遇到 ( 
                pop_symbol = symbol_stack[0]
                while pop_symbol != ')':
                    pop_symbol = symbol_stack.pop(0)
                    number_stack.insert(0, pop_symbol)
                    pop_symbol = symbol_stack[0]
                else:
                    symbol_stack.pop(0)
            elif len(symbol_stack) == 0 or symbol_stack[0] == ')' or x == ')' or priority[x] >= priority[symbol_stack[0]]:
                symbol_stack.insert(0, x)  # 当符号栈为空 或者 遇到 ) 或者栈顶的符号是 ) 或者优先级大于等于符号栈顶的运算符优先级 直接存进去

            elif priority[x] < priority[symbol_stack[0]]:  # 优先级小于符号栈顶元素的时候
                while symbol_stack[0] != &#39;)&#39; and priority[x] < priority[symbol_stack[0]]:
                    number_stack.insert(0, symbol_stack.pop(0))
                else:
                    symbol_stack.insert(0, x)
    else:
        while len(symbol_stack) != 0:
            number_stack.insert(0, symbol_stack.pop(0))
    return number_stack
ログイン後にコピー

例:

変換された接頭辞式スタックを操作するのは簡単です

(1) 新しいリストを初期化します

四則演算を徹底分析(2) 接頭辞式リストを右から左にたどって、数値を入力し、それを新しいリストに保存します

(3) 演算子に遭遇したら、新しいリストの最初の 2 つの数値をポップアップ表示し、演算を実行します。結果はプレフィックスまで新しいリストに保存されます

(4)現時点では、新しいリストには要素が 1 つだけあり、これが最終結果です

def calc(number1,number2,calc): # 两个数运算
    if calc == &#39;/&#39;:
        return number1 / number2
    elif calc == &#39;*&#39;:
        return number1 * number2
    elif calc == &#39;//&#39;:
        return number1 // number2
    elif calc == &#39;**&#39;:
        return number1 ** number2
    elif calc == &#39;%&#39;:
        return number1 % number2
    elif calc == &#39;+&#39;:
        return number1 + number2
    elif calc == &#39;-&#39;:
        return number1 - number2
ログイン後にコピー

合計結果が得られます:

def operation(stack_list:list):
    number = []
    for x in stack_list[::-1]:
        if x.isdigit():
            number.insert(0, x)
        else:
            first = number.pop(0)
            second = number.pop(0)
            tmp = calc(int(first),int(second), x)
            number.insert(0,tmp)
    return number.pop(0)
ログイン後にコピー

例:

前のプレフィックスの結果。式:

検証結果は正しいです四則演算を徹底分析

注: 式はスペースで区切る必要があります

四則演算を徹底分析 整数のみと一致します

以上が四則演算を徹底分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go 言語が四則演算を実装する方法 Go 言語が四則演算を実装する方法 Dec 21, 2023 pm 04:46 PM

Go 言語では、四則演算は基本的な算術演算子によって実装されます。よく使用される 4 つの算術演算: 1. 加算 (+): 2 つの数値を加算するために使用されます; 2. 減算 (-): 最初の数値から 2 番目の数値を減算するために使用されます; 3. 乗算 (*): 2 つの数値を乗算するために使用されます。 4. 除算 (/): 最初の数値を 2 番目の数値で割るのに使用されます。

Go言語で書かれた四則演算ライブラリ:シンプルで効率的な数学計算ツール Go言語で書かれた四則演算ライブラリ:シンプルで効率的な数学計算ツール Dec 23, 2023 am 11:49 AM

Go 言語で書かれた四則演算ライブラリ: シンプルで効率的な数学計算ツール コンピューター技術の継続的な進歩に伴い、数学計算は私たちの日常生活や仕事においてますます重要な役割を果たしています。複雑なデータ分析を実行する場合でも、単純なデータ処理を実行する場合でも、数学的計算は不可欠な部分です。計算の効率と精度を向上させるには、高品質の数学計算ツールに依存する必要があります。最新の高性能プログラミング言語として、Go 言語は数学的演算を実行するための豊富で強力なツールを提供します。この記事で紹介するのは

Go 言語を使用して基本的な算術演算子を実装する Go 言語を使用して基本的な算術演算子を実装する Dec 23, 2023 pm 02:52 PM

Go 言語は、オープンソースの静的に型付けされたコンパイル言語であり、そのシンプルさ、効率性、拡張の容易さから広く注目され、使用されています。この記事では、Go言語を使って簡単な四則計算機を作成する方法と具体的なコード例を紹介します。まず、演算式と演算子を表すためにいくつかの基本的なデータ構造を定義する必要があります。構造体を使用して演算子とオペランドを表現したり、列挙型を使用して演算子の値の範囲を制限したりできます。 typeOperatorintcons

Go言語の四則演算の簡単な入門ガイド Go言語の四則演算の簡単な入門ガイド Feb 19, 2024 pm 12:18 PM

入門ガイド: Go 言語の四則演算をゼロから実装する手順を学ぶ シンプルで効率的なプログラミング言語として、Go 言語はプログラマーの間でますます人気が高まっています。 Go 言語での四則演算の実装は複雑ではありません。この記事ではゼロから始めて、Go 言語で四則演算を実装する方法を段階的に学習します。この記事には、各ステップの実装方法をより深く理解できるように、具体的なコード例が含まれています。ステップ 1: 新しい Go 言語プロジェクトを作成する まず、新しい Go 言語プロジェクトを作成する必要があります。コマンドラインで以下を実行します

Go言語基礎チュートリアル:四則演算の実装方法 Go言語基礎チュートリアル:四則演算の実装方法 Dec 23, 2023 am 09:00 AM

Go 言語の基本チュートリアル: 四則演算の実装方法 (具体的なコード例が必要) はじめに: Go 言語は、クラウド ネイティブ アプリケーションを開発するためのプログラミング言語として、ますます多くの開発者に好まれています。 Go 言語を学習する初心者として、基本的な計算操作を習得することが不可欠です。この記事では、Go言語で四則演算を実装する基本的な方法と具体的なコード例を紹介します。加算演算 加算演算は最も単純な算術演算の 1 つであり、プラス記号 (+) を使用して加算演算を表すことができます。サンプルコードは次のとおりです: package

Go 言語の四則演算の原理と実践を学ぶ Go 言語の四則演算の原理と実践を学ぶ Dec 23, 2023 pm 01:07 PM

タイトル: Go 言語を通じて四則演算の原理と実践を学ぶ はじめに: Go 言語は、コンパイルされた同時実行性の高い、シンプルで信頼性が高く、効率的なオープン ソース言語です。 Go 言語を通じて四則演算の原理と実践を学ぶことで、基本的な数学的演算ルールを深く理解できるだけでなく、プログラミング的思考とスキルを訓練することもできます。この記事では、四則演算の基本原理を紹介し、実際の四則演算の処理を示すサンプルコードを Go 言語で記述します。 1. 四則演算の基本原理 四則演算は、足し算、引き算、掛け算など、数学の最も基本的な演算です。

強力な機能: Go 言語を使用して四則演算を実装し、複雑な演算要件に簡単に対応します。 強力な機能: Go 言語を使用して四則演算を実装し、複雑な演算要件に簡単に対応します。 Feb 26, 2024 pm 02:36 PM

タイトル: 強力な機能: Go 言語を使用して四則演算を実装し、複雑なコンピューティング要件に簡単に対処する コンピュータ分野の発展に伴い、四則演算は最も基本的な数学演算の 1 つとして、さまざまなソフトウェアで広く使用されるようになりました。発達。複雑なコンピューティングのニーズをより適切に満たすために、多くの開発者は Go 言語などの効率的なプログラミング言語を使用して関連機能を実装しています。この記事では、単純な加算、減算、乗算、除算から括弧や優先順位をサポートする複雑な演算まで、Go 言語を使用して四則演算を実装する方法を紹介し、読者が計算問題を簡単に解決できるようにします。まず、私たちは、

四則演算を実装するための Go 言語の簡単な入門 四則演算を実装するための Go 言語の簡単な入門 Feb 19, 2024 pm 02:59 PM

Go 言語での四則演算の実装をすぐに始めましょう。新しいプログラミング言語を学習する場合、基本的な四則演算を習得することは非常に重要なステップです。この記事ではGo言語で四則演算を実装する方法と具体的なコード例を簡単に紹介します。 Go 言語は、Google によって開発および推進されている簡潔で効率的なプログラミング言語です。豊富な標準ライブラリが含まれており、オブジェクト指向プログラミングや同時プログラミングなどの強力な機能も備えているため、さまざまな種類のアプリケーション開発に適しています。四則演算実装の基本原理はGo言語の基本原理を利用する

See all articles