2

J'écris un simple script python pour résoudre des équations différentielles en utilisant la méthode Eulers et maintenant je dois changer le code source chaque fois que je veux résoudre une nouvelle équation.Python Equation d'entrée utilisateur

(sécurité n'est pas de toute préoccupation au moment que c'est un projet personnel.)

Ma question:
Serait-il possible de taper une équation en entrée de l'utilisateur et de le rendre à une variable? Par exemple, en utilisant e=input("enter equation") où vous entrez y/x et en faisant e une variable pour une utilisation ultérieure?

#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

Cela dépend de ce que vous voulez faire avec l'équation. Vous pouvez analyser et transformer un arbre de syntaxe abstraite. Ou vous pouvez l'analyser en notation postfixée. –

+0

Je prévois simplement d'utiliser l'équation comme une variable qui, plus tard, est utilisée pour résoudre une réponse, plutôt nouvelle pour python et je ne sais pas comment expliquer davantage mes besoins. – Chrizzy

+0

Copie possible de [entrer une fonction symbolique dans un code python] (http://stackoverflow.com/questions/15369106/input-a-symbolic-function-in-a-python-code) –

Répondre

0

Tack för exempel - cela m'a permis de déterminer ce dont vous avez besoin.

Oui, c'est possible. Lire dans l'équation comme une variable de chaîne, telle que

equation = input("Enter your equation here") 

Puis, quand vous voulez trouver une valeur pour e, utilisez la méthode Python eval:

e = eval(equation) 

Soyez très prudent avec cette méthode : eval() est puissant, et très discriminant sur ce qu'il accepte.

+1

S'il utilise une chaîne fournie par un utilisateur, il ** ne doit pas ** utiliser 'eval()'. Il n'y a aucun moyen de le rendre sûr. –

+0

Mais encore une fois, même SymPy utilise 'eval()' actuellement dans certaines de ses méthodes. Donc, peut-être que cette réponse n'est pas mauvaise, à condition qu'elle contienne un gros avertissement sur les raisons pour lesquelles c'est dangereux. –

0

Vous pouvez utiliser le eval en combinaison avec des fonctions lambda, comme ceci:

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

Pour avoir fait ce interactif, utilisez raw_input() pour obtenir le réel expression ('lambda x, y: x/y' dans ce cas). Ou si vous préférez ne pas saisir l'ensemble lambda libellé, et à condition que vous aurez toujours la variable indépendante x et la y variable dépendante, dans une équation comme y = f(x), vous pourriez écrire quelque chose comme ceci:

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

Et puis vous entrez le 'x/y' lorsque vous êtes invité à.

Cependant, êtes-vous sûr que vous en avez besoin à l'intérieur la boucle while?