2017-02-02 8 views
2

私はコーディングが初めてですが、基本的に行をプロットするプログラムです。ユーザーはvとaの値を入力し、vとaとxはyを決定します。私はこれでこれを行うことを試み:TypeError:ufunc 'multiply'にシグネチャの一致するタイプのループが含まれていませんでしたdtype( 'S32')dtype( 'S32')

x = np.linspace(0., 9., 10) 
a = raw_input('Acceleration =') 
v = raw_input('Velocity = ') 
y=v*x-0.5*a*x**2. 

基本的に、これは加速し、xは時間である、vは速度である放物線を表します。しかし、私はこのエラーを取得しておいてください。

TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32' 
) dtype('S32') dtype('S32') 

答えて

3

documentation of raw_inputから:

The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that.

だから何が起こることは、あなたが定義されていないフロート、y="3" * x - 0.5 * "3" *x**2のようなもの、との文字列を乗算してみてくださいということです。

これを回避する最も簡単な方法は、入力文字列を最初にfloatにキャストすることです。

x = np.linspace(0., 9., 10) 
a = float(raw_input('Acceleration =')) 
v = float(raw_input('Velocity = ')) 
y=v*x-0.5*a*x**2 

あなたのpython 3を使用している場合、あなたはinput代わりのraw_inputを使用する必要があるだろうというマインド、

a = float(input('Acceleration =')) 
+0

なぜことが最も簡単な方法ですか? – AsheKetchum

+0

まあ、python2では、 'raw_input'の代わりに' input'を使うことができますが、問題の起源を少し隠してしまいます。 'input'は入力を評価するので隠れたトラップがありますが、' float(raw_input()) 'は動作するかエラーを投げます。 – ImportanceOfBeingErnest

+0

フロートにキャスティングするのが最も安全ですか? – AsheKetchum

関連する問題