この記事では、主に Python で設計および実装された計算機関数を紹介します。Python3.5 の通常、文字列、数値演算およびその他の関連操作テクニックを分析し、必要な方は参考にしてください。この記事へ
この例では、Python で設計および実装された計算機関数について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
PYTHON を使用して、次のような電卓の機能を設計および処理します。
1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3)/(16-3*2))
私の基本的な考え方計算の処理は次のとおりです:
問題解決の考え方は、内側の括弧の演算を最初に処理する必要があるということです - 外側の括弧の演算は、最初に乗算と除算、加算と減算の原則です:
1 によって入力された文字列を定期的に処理します。可能であれば、計算式を正規化し、最内層の各データを取得してから、1つずつ計算します
使用する規則性は次のとおりです。
inner = re.search("\([^()]*\)", calc_input)
2. 括弧内の計算式を変更します。 計算結果は、元の初期式の位置を置き換えます。 処理が必要な繰り返し演算の関数は、計算前に個別に処理されます。
def del_double(str): str = str.replace("++", "+") str = str.replace("--", "-") str = str.replace("+-","-") str = str.replace("- -","-") str = str.replace("+ +","+") return str
3.次に括弧を内側から外側に向かって削除して位置を置き換えます
calc_input = calc_input.replace(inner.group(), str(ret))
計算結果を元の計算式に置き換えます
4.と、計算制御関数を組み合わせて計算を呼び出します。途中で注意する必要があるのは、マイナス記号と数値と * を一緒に処理することで、残りはかなり優れています。 special具体的なロジック図は次のとおりです。
パターン | 説明 |
---|---|
^ | 文字列の先頭と一致します |
$ | 文字列の末尾と一致します。 |
. | は、改行文字を除く任意の文字に一致します。 re.DOTALL フラグが指定されている場合、改行文字を含む任意の文字に一致します。 |
[...] | は、個別にリストされている文字のグループを表すために使用されます: [amk] は、'a'、'm'、または 'k に一致します |
[^...] | はnot in [ の文字 ]: [^abc] は、a、b、c 以外の文字と一致します。 |
re* | は 0 個以上の式と一致します。 |
re+ | は 1 つ以上の式と一致します。 |
re? | 貪欲でない方法で、前の正規表現で定義された 0 または 1 つのフラグメントと一致します |
re{ n} | |
re{ n,} | n つ前と完全に一致表現。 |
re{ n, m} | は、前の正規表現で定義されたフラグメントの n 倍から m 倍の貪欲な方法で一致します |
a b | は a または b と一致します |
(re) | G は括弧内の式と一致し、グループ |
(?imx) | も表します。正規表現には、i、m、または x の 3 つのオプションのフラグが含まれます。括弧内の領域にのみ影響します。 |
(?-imx) | i、m、または x のオプションのフラグをオフにする正規表現。括弧内の領域にのみ影響します。 |
(?: re) | Like (...) ですが、グループを表しません |
(?imx: re) | 括弧内に i、m、または x のオプションのフラグを使用します |
(?-imx: re) | かっこ内の i、m、x のオプションのフラグは使用しないでください |
(?#...) | Comments. |
(?= re) | Forward正の区切り文字。 ... で示される、含まれている正規表現が現在の位置と正常に一致する場合は成功し、そうでない場合は失敗します。しかし、含まれている式が試行されると、マッチング エンジンはまったく改善されず、パターンの残りの部分は依然として区切り文字の右側を試行する必要があります。 |
(?! re) | 前方負の区切り文字。正の区切り文字とは反対に、含まれる式が文字列の現在位置で一致しない場合に成功します |
(?> re) | 独立したパターンが一致したため、バックトラッキングの必要がなくなります。 |
w | は英数字と一致します |
W | は英数字以外と一致します |
s | は[tnrf]と同等の任意の空白文字と一致します |
S | 空でないものと一致します文字 |
d | は、[0-9]に相当する任意の数値に一致します。 |
D | は、数字以外の任意の数値に一致します |
A | は、文字列の先頭に一致します |
Z | 文字列の末尾に一致します。改行がある場合は、改行より前の文字列の末尾のみが一致します。 c |
z | は文字列の末尾に一致します |
G | は最後の一致が完了した位置に一致します。 |
b | は、単語とスペースの間の位置を指す単語境界に一致します。たとえば、「erb」は「never」の「er」と一致しますが、「verb」の「er」とは一致しません。 |
B | 単語以外の境界と一致します。 「erB」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。 |
n、t など。 | は改行文字と一致します。タブ文字と一致します。など。 |
1...9 | は、n 番目のグループの部分式と一致します。 |
10 | は、n 番目のグループの部分式が一致する場合、それと一致します。それ以外の場合は、8 進数の文字コードの表現を指します。 |
以上がPython 設計の電卓関数実装の完全な例の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。