2017-02-13 20 views
0

C#アプリケーションでIronPythonを使用して式を計算しています。ユーザーは、私はその後、計算を行うためにPythonスクリプトをIronPythonで数値計算を実行する方法

A + B + C 

のような入力式を実行します:

def main(): 
    return (A + B + C) 
main() 

はどのようにして計算が行われるよう、私に値を示し累計を生成することができますか?だから、これらの入力のために:

A = 1 
B = 2 
C = 3 

私はこの出力をしたい:

A: 1 
B: 3 
C: 6 

は現在、私は、成分を抽出し、手動ステップで計算ステップを実行しようとする正規表現を使用していますが、それはめちゃくちゃますかっこを使用するとき、または演算子の優先順位によって式が別のポイントで計算を開始するときA + B + C * D/E

私は演算子のオーバーロードが行く方法だろうと思う。私はC#でこれを行う方法を知っていますが、Pythonはまだかなり新しいです。任意の提案をいただければ幸いです!

答えて

0

私は基本的な解決策を得ました。演算子にオーバーロードするオブジェクト(MagicNumber)の値をラップします。

RunningTotal = {} 

class MagicNumber(object): 

    def __init__(self, name, value): 
    self.name = str(name) 
    if isinstance(value, MagicNumber): 
     value = value.value 
    self.value = float(value) 

    def __str__(self): 
    return str(self.value) 

    def __add__(self, other): 
    if not isinstance(other, MagicNumber): 
     other = MagicNumber('literal', float(other)) 
    result = MagicNumber(self.name, self.value + other.value) 
    RunningTotal[other.name] = result.value 
    return result 

    def __radd__(self, other): 
    if not isinstance(other, MagicNumber): 
     other = MagicNumber('literal', float(other)) 
    result = MagicNumber(self.name, other.value + self.value) 
    RunningTotal[self.name] = result.value 
    return result 

だから、あなたはこのようにそれを使用する場合:

A = MagicNumber('A', 1) 
B = MagicNumber('B', 2) 
C = MagicNumber('C', 3) 

result = A + B + C 

あなたは積算合計辞書にこれらの値を取得する:

B: 3 
C: 6 

あなたはまた、サブ、MUL、DIV(他の演算子をオーバーロードすることができます、等の逆のカウンターパートを含む)。オーバーロードの可能性については、python docsを参照してください。

関連する問題