Frage

Ich schreibe ein Programm das Volumen eines festen Dreh zu berechnen. Der erste Schritt dieses ist ein integraler zu berechnen. Ich verwende scipy.integrate für diese, aber ich kann nicht den besten Weg, herauszufinden, eine Gleichung zu haben (wie x=x**2 Eingabe in der Befehlszeile ich ursprünglich über das Hinzufügen von einem Argumente wurde Planung ‚in Bezug auf: x | y‘ und dann. die Funktion als Lambda nehmen. Leider argparse nicht Lambda als Argument Typen nehmen, und versucht, eine Zeichenfolge zu verwenden, um einen Lambda (f = lambda x: args.equation) nur gibt eine Zeichenfolge (verständlicherweise wirklich).

zu konstruieren

Hier ist, was ich bisher habe:

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)

Jede Beratung sei darauf hingewiesen, Dank

War es hilfreich?

Lösung

Wenn es absolut keine Bedenken hinsichtlich der Sicherheit von Risiken der Benutzer laufen beliebige Python-Code lassen , dann können Sie eval verwenden ein aufrufbare Objekt zu erstellen:

volume(eval('lambda x: %s' % args.equation), args.a, args.b)

Andere Tipps

Es soll möglich sein, eval() auf der Saite Sie bekommen Argumente:

>>> f = eval("lambda x: x**2")
>>> f(5)
25
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top