幼稚園時代「何組」でしたか?

pythonで、
def CircleArea():
a=r*r*3.14
print(r,a)
というプログラムをunixのvimでcircle.pyで保存しました。
今度はこれをpythonで実行したいと思って, ターミナルに, circle.pyと入力しましたが, 実行しません。どうすればよろしいでしょうか?
よろしくお願いします。

A 回答 (8件)

まずエラーが出る原因から、


u=parallax(a)
ですが、関数名はParallaxと大文字から始まっているので、合わせてください。また引数がaになっていますが、sのはずです。
それと、
t=float(input("b?")
は)が不足しています。

次に改良点ですが、
printの中でまたにParallax(s)が呼ばれていますので、uに変更しました。
もうひとつ関数の中の数値が整数型になっています。このプログラムでは問題はないのですが、もし整数/整数を実行した場合には、結果が浮動小数点にならずに整数で切り捨てられてしまいますので大きな誤差になります。特に理由がなければ浮動小数点にした方が良いように思います。
s=float(input("a?"))が関数定義の間に入っていました。これでも正常に動作しますが、関数定義とは場所を分けた方が気持ちがよいので、下に移しました。


修正したものは以下の通りです。

#!/usr/bin/env python
from math import*
def Parallax(a):
return 1.0/a
def AbMagnitude(b,u):
return b-5.0*log(u/10.0)
s=float(input("a?"))
u=Parallax(s)
t=float(input("b?"))
print(s,u,t,AbMagnitude(t,u))
    • good
    • 0
この回答へのお礼

ありがとうございます。前の補足の後、自分なりに間違いを見つけて、プログラムを実行できるようにしたものと、今回の改良されたプログラムがほとんど一致していたのでよかったです。
丁寧な添削、回答を長い間ありがとうございました。

お礼日時:2012/11/12 01:33

No.6の補足欄について



これまでの回答で必要な情報は全て書いています。もう一度読み直してください。
自分で作ったプログラムを書き込んでください。
添削はいたします。

この回答への補足

circle.pyのプログラム作成はできました。ありがとうございます。
次に、
#!/usr/bin/env python
from math import*
def Parallax(a):
return 1/a
s=float(input("a?"))
def AbMagnitude(b,u):
return b-5*log(u/10)
u=parallax(a)
t=float(input("b?")
print(s,Parallax(s),t,AbMagnitude(t,u))
というプログラムを作りましたが、printのところで、エラーが出ますどうしてでしょうか。
よろしくお願いします。

補足日時:2012/11/11 18:38
    • good
    • 0

man xargs


でコマンドの使い方が分かりますので調べてみてください。

-L 1が必要かは
cat data.txt |xargs -p -L 1 ./circle.py
cat data.txt |xargs -p ./circle.py
のように-pを追加すると実行されるコマンドが分かりますので試してみてください。

この回答への補足

ありがとうございます。
手間を取ってすみませんが、 前の回答・質問に関してなのですが、def CircleArea(r,b)の関数の値を使って、def Time(CircleArea(r,b))
3*CircleArea(r,b)を、計算したいのですが、どうすればよいでしょうか? よろしくお願いします。

補足日時:2012/11/09 16:33
    • good
    • 0

表にするなら、単純な計算は表計算ソフトでやるのが早いですが。



なんとなく丸投げっぽいですが、Pythonでやるのは基本の基本なので考えてもらうとして
No.3のプログラムを使って一括して計算する方法を書いておきます。

まず、1行に2つの数値を空白(tabでも良さそう)で区切って書いたファイルを作ります。
1 2
4 5
6 8
こんな感じのファイルdata.txtを作ったとします。
それぞれの行を引数として渡して
./circle.py 1 2
./circle.py 4 5
./circle.py 6 8
と3回実行してくれれば全部計算されます。

UNIX系ではこのようなことをうまくやってくれるxargsがあります。
cat data.txt|xargs -L 1 ./circle.py
のように使います。

この回答への補足

cat data.txt|xargs -L 1 の-L 1の意味は何でしょうか。簡単な質問かもしれませんが、ご教授お願いします。

補足日時:2012/11/07 16:14
    • good
    • 0

>3行目をreturn r*r*b*3.14として、r,bを両方聴くにはどうしたらいいでしょうか?


まず、関数def CircleArea(r):にbも渡せるように、
def CircleArea(r, b):のようにしまします。
a=float(input("r?"))と同じように、bに関してもう一行追加します。このあたりは基本中の基本で自分で考えてみてください。

余談ですが、
コマンドから数値を指定する方法を書いておきます。

#!/usr/bin/python
import sys

param = sys.argv
r=float(param[1])
b=float(param[2])
print (r,b, r*r*b*3.14)

関数にしていないので字下げは必要ありません。
カレントディレクトリにある場合には
./circle.py 3 5
のように後ろにr, bの値を入れると計算できます。

この回答への補足

ありがとうございます。うまくいきました。

また、質問なのですが、いちいち、データを1つずつ打ち込むのは大変なので、表で一括にして、プログラムを実行する方法はあるのでしょうか? よろしくお願いします。

補足日時:2012/11/05 14:43
    • good
    • 0

関数の定義しかありませんので、実行ができていないのです。


入力と関数呼び出しを追加しておきました。
三行目のreturnから始まる行だけ、前に空白をいれて関数の定義として認識させてください。

#!/usr/bin/python
def CircleArea(r):
return r*r*3.14
a=float(input("r?"))
print (a, CircleArea(a))

この回答への補足

ありがとうございます。うまくいきました。
また、質問ですが、3行目をreturn r*r*b*3.14として、r,bを両方聴くにはどうしたらいいでしょうか?

補足日時:2012/11/01 15:28
    • good
    • 0

>実行権限はどこで与えるのでしょうか?


作成したファイルcircle.pyに対して与えます。
chmod a+x circle.py
のコマンドで可能です。

この回答への補足

実行権限をつけて実行したのですが、rについて聞いてきません。どうすればよろしいでしょうか?

補足日時:2012/10/31 15:14
    • good
    • 0

最初の行にpythonのある場所を以下のように指定します


#!/usr/bin/python
またはこちらでも
#!/usr/bin/env python
二行目以降からプログラムを書きます

そして実行権限を与えます。
chmod a+x circle.py
これで実行できます。
カレントディレクトリにcircle.pyがある場合には
./circle.py
でないと実行できない場合ばあります。

この回答への補足

すみません。1つ分からないところがあるのですが、実行権限はどこで与えるのでしょうか?
よろしくお願いします。

補足日時:2012/10/29 23:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!