2011-10-28 13 views
1

1.対話的で記号変数を取ることができるモジュールで関数を定義したいと思います。スクリプトからの入力として記号を取る[sympy]

はのは、関数が

http://www.texify.com/img/%5CLARGE%5C%21f%28x%29%5C%20%3D%5C%202x.gifあるとしましょう。

は、その後、私はそれが

>>> function() 
number: 3 
6 
>>> function() 
number: x 
2*x 
>>> function() 
number: a 
2*a 

のように仕事をしたい私は、ユーザー入力を要求したい理由は、私は多くの引数を持つ関数と思っていることです。私は `f(x)+ g(y)= h(z) 'のような方程式で使うことも考えているので、変数を固定する代わりに割り当てることができれば便利です。


2.これはうまくいきませんでした。理由はケンドールの答えで説明されています。

私は最初にモジュールを作った。

twice.py:

def twice(): 
    num = input('number: ') 
    return 2*num 
その後

私はそれを実行した、

あなたは、モジュール内のモジュールのグローバルな名前空間に twice()実行し、それをインポートして、インタラクティブにアクセスできません
>>> import sympy as s 
>>> x = s.var('x') 
>>> 
>>> import twice as t 
>>> t.twice() 
number: x 
NameError: name 'x' is not defined 
+0

Python 2.xで 'input'を使用しないでください!!安全ではありません:http://docs.python.org/library/functions.html#inputこれは 'eval(raw_input())'と同等ですので、コードを評価することができます。代わりに 'raw_input()'を使用してください。 – rubik

答えて

2

セッションのグローバル変数(たとえば、x)。結局のところ、それはモジュール全体のポイントです。

これは、変数をグローバル変数で操作するのではなく、関数に渡すことによって通常は修正されます。

sympyと何も関係がありません。普通のPython番号などを使用していた場合、同じ問題が発生します。

+0

渡す変数は 'def function(arg):'を意味しますか?何とかそれをインタラクティブに保つ方法はありますか? – weis26

+0

はい、 'def function(arg)'です。 "インタラクティブにする"には、メインのスクリプトに 'input()'を実行させ、その結果を関数に渡します。 – kindall

+0

実際のコードを提供できますか?私はあなたのアドバイスで実際に何をするべきかわかりません... – weis26

1

あなたはおそらく、このように動作するはずです:

私がお勧めするもの:

これは正確にあなたが望むように動作しませんが、それは、シンプルで抽象的な物事を保持します。 numがsimpy変数、int、浮動小数点数、リストのどれであるかは関係ありません。数値オブジェクトの場合は2回適用されます* 2。 libで2回安全に使うことができます。

twice.py

def twice(num): 
    return 2*num 

コンソールユーザ入力バージョン

>>> import sympy as s 
>>> x = s.var('x') 
>>> 
>>> import twice as t 
>>> t.twice(x) 

:ここ

ワーキング溶液です。関数内で関数と関数を混在させているので、使用しないでください。どちらが悪いですか。ユーザー入力のプロンプト時

twice.py

import sympy as s 

def fetch_input(): 
    userInput = raw_input('number: ') 
    try: 
     return int(userInput) 
    except ValueError: 
     return s.var(userInput) 

def twice(): 
    num = fetch_input() 
    return 2*num 

raw_inputは、通常は最高です。式を評価しようとする代わりに文字列を返します。

+0

それをインタラクティブに保つ方法はありますか? – weis26

+0

このバージョンと対話していないものは何ですか? – Simon

+0

私は曖昧でした。私は「ユーザーの入力を促す」という意味でした。セクション1の最後にいくつかのコメントを追加しました。それを見てください。 – weis26

関連する問題