2

今、私はエラーが発生しています:アプリケーションのサーバーエラー。入力された名前をインポートできません 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。例外の詳細: IronPython.Runtime.Exceptions.ImportException: 入力された名前をインポートできません ソース エラー: 44 行目: expr)); 45行目: 46行目: script.Execute(scope); 48行目: return scope.GetVariable("result");

public static string PythonEvaluate(string expr) 
{ 
    var engine = Python.CreateEngine(); var paths = engine.GetSearchPaths();

    paths.Add(@"C:\Python27\Lib\Site-Packages");
    paths.Add(@"C:\sympy");
    engine.SetSearchPaths(paths);

    var scope = engine.CreateScope();

    var script = engine.CreateScriptSourceFromString(string.Format(@"
                import sys
                sys.platform = "win32"  // Default is cli

                from sympy import *
                n = Symbol('n')
                value = {0}

                import clr
                from System import String
                result = clr.Convert(value , String)",
            expr));

    script.Execute(scope);  

    return scope.GetVariable("result");
}

protected void Page_Load(object sender, EventArgs e)
{
    var result = PythonEvaluate("limit((1 + 3/n)**n, n, oo)");
    Label3.Text = result;
}
4

2 に答える 2

3

私は .NET で Python コードを実行することに慣れていませんが、Python ではすべてのインデントに意味があります。コードの先頭の空白をすべて削除する必要があると思います。

    // ...
    var script = engine.CreateScriptSourceFromString(string.Format(@"
from sympy import *
value = {0}

import clr
from System import String
result = clr.Convert(value , String)", expr));

    script.Execute(scope);
于 2013-01-03T12:42:32.097 に答える
1

コメントで指摘したように、エラーが何であるかを教えてくれなくても、何が問題なのかを伝えることは不可能ですが、limit間違って使用している可能性があります. ラムダ関数ではなく、シンボリック オブジェクトを渡す必要があります。3 つの引数を取り、無限大は ,ooではなくと呼ばれinfます。

n = Symbol("n")
limit((1 + 3/n)**n, n, oo)
于 2013-01-04T18:02:05.757 に答える