2

Ich schreibe ein einfaches Python-Skript, um Differentialgleichungen mit der Eulers-Methode zu lösen, und jetzt muss ich den Quellcode jedes Mal ändern, wenn ich eine neue Gleichung lösen will.Python Benutzereingabe Gleichung

(Sicherheit ist nicht, wenn eine Besorgnis im Moment, da dies ein persönliches Projekt ist.)

Meine Frage:
Wäre es möglich, eine Gleichung als Benutzereingabe zu geben und macht es zu eine Variable? Verwenden Sie beispielsweise e=input("enter equation"), wo Sie y/x eingeben und e eine Variable für die spätere Verwendung machen?

#I would like to be able to type in a equation as user input and turn it to a variable for later use in the if and elif segments, example 

    e=input("Enter your equation here") 
    e=float(e) 


    h=input("Ange steglängd: ") 
    h=float(h) 

    x=input("Angivet värde på x: ") 
    x=float(x) 

    y=input("Värde på y med anseende på x: ") 
    y=float(y) 

    z=input("Närmevärde du vill ha för y(x), ange x: ") 
    z=float(z) 


    if x<z: 
     while x<z: 

      #Type in equation below as e 

      e=y/x 

      y=y+h*e 
      x+=h  

     print(y) 

    elif x>z: 
     while x>z: 

      e=y/x 

      y=y-h*e 
      x-=h 

     print(y) 
+1

Es hängt davon ab, was Sie mit der Gleichung tun möchten. Sie könnten analysieren und in einen abstrakten Syntaxbaum umwandeln. Oder Sie könnten es in Postfix-Notation analysieren. –

+0

Ich plane einfach, die Gleichung als eine Variable zu verwenden, die später verwendet wird, um eine Antwort zu lösen, ziemlich neu bei Python und nicht sicher, wie ich meine Bedürfnisse weiter erklären soll. – Chrizzy

+0

Mögliches Duplikat von [geben Sie eine symbolische Funktion in einem Python-Code ein] (http://stackoverflow.com/questions/15369106/input-a-symbolic-function-in-a-python-code) –

Antwort

0

Tack för exampel - das erlaubt mir zu bestimmen, was Sie brauchen.

Ja, das ist möglich. Lesen Sie in der Gleichung als String-Variable, wie

equation = input("Enter your equation here") 

Dann, wenn Sie einen Wert für e zu finden, verwenden Sie die Python eval Methode:

e = eval(equation) 

Seien Sie mit dieser Methode sehr vorsichtig : eval() ist mächtig und sehr diskriminierend, was es akzeptiert.

+1

Wenn er eine Zeichenfolge verwendet, die von einem Benutzer bereitgestellt wird, darf ** er ** nicht 'eval()' verwenden. Es gibt keine Möglichkeit, es sicher zu machen. –

+0

Aber auch, SymPy verwendet 'eval()' derzeit in einigen seiner Methoden. Also, vielleicht ist diese Antwort nicht schlecht, solange sie eine große Warnung enthält, warum es gefährlich ist. –

0

können Sie die eval in Kombination mit Lambda-Funktionen verwenden, wie folgt aus:

e = eval('lambda x, y: x/y') 

Um tatsächlich diese interaktive zu haben, verwenden Sie raw_input() die tatsächliche zu erhalten Ausdruck ('lambda x, y: x/y' in diesem Fall). Oder wenn Sie nicht lieber die ganze lambda Formulierung geben, und unter der Voraussetzung, dass Sie immer die unabhängigen Variable x haben werden und die abhängige Variable y, in einer Gleichung wie y = f(x), könnte man so etwas schreiben:

e = eval('lambda x, y: ' + raw_input('enter equation for y=f(x): ')) 

Und dann geben Sie 'x/y' ein, wenn Sie dazu aufgefordert werden.

Sind Sie sicher, dass Sie es brauchen innerhalb die while Schleife?

Verwandte Themen