3

回転体の体積を計算するプログラムを書いています。この最初のステップは、積分を計算することです。私はscipy.integrateこれに使用していますが、方程式を作成するための最良の方法を見つけることができません(x=x**2コマンドラインでの入力など。当初は、x | yに関して引数を追加してから、残念ながら、argparseラムダを引数型として使用することはありません。文字列を使用してラムダ(f = lambda x: args.equation)を作成しようとすると、文字列が返されます(当然のことながら実際に)。

これが私がこれまでに得たものです:

import sys
import argparse
import math
from scipy import integrate

parser = argparse.ArgumentParser(description='Find the volume of the solid of rotation defined')
parser.add_argument('equation', help='continous function')
parser.add_argument('a', type=float, help='bound \'a\'')
parser.add_argument('b', type=float, help='bound \'b\'')
parser.add_argument('-axis', metavar='x|y', help='axis of revolution')
args = parser.parse_args()

def volume(func, a, b, axis=None):
  integral = integrate.quad(func, a, b)
  return scipy.py * integral

print volume(args.equation, args.a, args.b)

アドバイスをいただければ幸いです

4

2 に答える 2

6

ユーザーに任意のPythonコードを実行させることによるセキュリティリスクについてまったく懸念がない場合は、を使用evalして呼び出し可能なオブジェクトを作成できます。

volume(eval('lambda x: %s' % args.equation), args.a, args.b)
于 2010-12-08T18:11:57.203 に答える
2

eval()引数から取得した文字列で使用できるはずです。

>>> f = eval("lambda x: x**2")
>>> f(5)
25
于 2010-12-08T18:08:01.200 に答える